Vielen Dank an alle die mit mir meine Verständnisfragen durchgenommen haben. inherited ist mir jetzt klarer. Abschließend kann man sagen, daß inherited einfach nur den Vorfahr aufruft. Was sich so einfach anhört ist Anfängern nicht sofort klar. Erst wenn man die Konsequenzen sieht wird es klarer. In einer Klasse die auf TObject aufbaut kann man in Create auf inherited verzichten, da im Create von TObject, also dessen Vorfahr, nichts passiert. Beim Arbeiten mit anderen Vorfahrklassen könnte dagegen der fehlende Aufruf von inherited böse Folgen haben, da dann der Vorfahr nicht aufgerufen wird und später einige geerbte Eigenschaften oder Methoden ins leere laufen.
Hier ein Beispiel das ich mir zum Verständnis erstellt habe. Ich hab mir eine eigene IniFile Klasse geschrieben bei der nur Create ersetzt wurde. Rufe ich kein inherited auf, hat das Konsequenzen und im Beispiel tritt bei WriteString ein Fehler auf.
Delphi-Quellcode:
type
TMeineIniFile = class(TIniFile)
public
constructor Create(const FileName: string);
end;
constructor TMeineIniFile.Create(const FileName: string);
begin
//inherited Create(FileName); //mal mit mal ohne
end;
procedure TForm1.Button1Click(Sender: TObject);
var
IniFile: TMeineIniFile;
begin
IniFile := TMeineIniFile.Create('c:\temp\tmp.ini');
try
IniFile.WriteString('a', 'b', 'Gefunden');
ShowMessage(IniFile.ReadString('a', 'b', 'Nicht gefunden'));
finally
IniFile.Free;
end;
end;
Zwar sind einige meiner Fragen zu inherited noch nicht beantwortet, aber an dieser Stelle genügt es. Ich hacke später nochmal nach.