![]() |
Frage zu Inherited
Hallo und Guten Abend an alle DP´ler,
Ich hab da mal eine Frage zu inherited. Und zwar schreibe ich mir gerade auf, was ich bis jetzt so über Komponentenerstellung kennen gelernt habe und habe einen Quellcode geschrieben der wie folgt aussieht:
Delphi-Quellcode:
Ich weiß ist nichts wirklich weltbewegendes, aber eins ist mir dabei aufgefallen: Die von mir eigentlich unbeabsichtigte Verwendung von inherited. Eigentlich kenne ich das nur bei der Erstellung von Komponenten, damit die ursprüngliche, vererbte Methode in der überschriebenen aufgerufen werden kann. Die Procedure, so wie sie dort steht macht anscheinend genau was ich möchte. Leider habe ich in der Hilfe zu inherited nur Erklärungen gefunden, die auf die Vererbung von Methoden zurückführen, was ich (glaube ich) zumindest ja eigentlich nicht mache oder wenn dann völlig ohne meines Wissens.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; procedure Edit1KeyPress(Sender: TObject; var Key: Char); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if (Key in [#0..#7, #9..#15, #17..#26, #28..#47, #58..#255]) then key := #0 else inherited; end; end. Wie ist die anscheinend richtige Verwendung des Begriffes inherited aber ohne Vererbung zu veerstehen? Kann mir das vieleicht mal jemand erklären? Vielen Dank BAMatze [quote] |
Re: Frage zu Inherited
inherited ruft einfach die Methode der Superklasse auf
|
Re: Frage zu Inherited
Zitat:
|
Re: Frage zu Inherited
Wenn du mit "üblich" das ererbt Verhalten meinst, ja.
|
Re: Frage zu Inherited
Zitat:
|
Re: Frage zu Inherited
Wobei die meisten Propertys für die Ereignisbehandlung bei VCL Komponenten wohl sowieso undefiniert sind?!
|
Re: Frage zu Inherited
In dem Fall passiert bei inherited schlicht gar nichts, denn es gibt keine entsprechende Methode im Vorfahren. In dem Fall gibt es keinen Fehler, denn das könnte ja später hinzugefügt werden.
Damit das etwas bewirkt muss in der Oberklasse (was hier TForm wäre) eine genau gleichnamige virtuelle Methode vorhanden sein, die du überschrieben hast. Hier hast du die aber neu eingeführt und als Ereignisbehandlungsroutine zugewiesen, eine Methode "Edit1KeyPress" gibt es in TForm nicht. Fazit: Entferne einfach das else mit dem inherited, es wird keinen Unterschied machen. ;-) Denn die weitere Behandlung der Tastatureingabe passiert nach der Benachrichtigung an dich via Edit1KeyPress sowieso. Nur dass du bei unerwünschten Tasten die Nulltaste (also nix) aus der Eingabe gemacht hast. Also kommt nix mehr an. |
Re: Frage zu Inherited
Zitat:
wenn man einen Button-Eventhandler schreibt, der nur inherited enthält,
Delphi-Quellcode:
wird er beim Kompilieren komplett gelöscht, die IDE scheint zu merken, dass der Code 'nichts' macht.
procedure TForm1.Button1Click(Sender: TObject);
begin inherited; end; Der Compiler jedoch gibt keinen Hinweis, wenn ein inherited ins Leere geht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz