Guten Morgen zusammen,
ich versuche grade eine Klasse zu vererben, verstehe hier aber wohl gerade etwas nicht so ganz. Vielleicht kann mir jemand auf die Sprünge helfen:
Ich habe diese Base Klasse:
Code:
TMyDeviceList = class (TGenericSettings)
strict private
var
FList: TObjectList<TMyDeviceListItem>;
private
var
function GetCount: Integer;
procedure Init; virtual;
public
var
constructor Create;
published
var
property Count: Integer read GetCount;
end;
Hier das Create:
Code:
procedure TMyDeviceList.init;
begin
FList := TObjectList<TMyDeviceListItem>.Create(TRUE);
end;
constructor TMyDeviceList.Create();
begin
inherited;
init;
end;
mit der Funktion
Code:
function TMyDeviceList.GetCount: Integer;
begin
result := FList.Count;
end;
Diese vererbt an:
Code:
TPCListSettings = class(TMyDeviceList)
private
var
FList: TObjectList<TPCListItem>;
procedure init; override;
end;
Implentierte Init:
Code:
procedure TPCListSettings.init;
begin
FList := TObjectList<TPCListItem>.Create(TRUE);
end;
Wenn ich nun folgendes mache
Code:
var myCount := PCListSettings.Count;
lande ich aber in der übergeordneten Klasse.
Nun meine Frage: Wieso lande ich mit der Funktion getCount in der FList von TMyDeviceList obwohl ich mich doch in der Klasse TPCListSettings befinde. Das macht für mich nur so Semi sinn. Wenn ich an einer anderen Funktion der Klasse bin, greift er doch auf die Korrekte Liste zu. Sollte die Funktion nicht ebenfalls auf die korrekte Liste zugreifen auch wenn Sie vererbt ist? oder musss ich hier wirklich mit einem override arbeiten und die gleiche Funktion nochmal schreiben? -> Falls ja würde das vererben an dieser Stelle für mich gar keinen Sinn machen und ich muss das alles wieder rausrupfen...
Prinzipiell: Kann ich überhaupt auf Variablen zurückgreifen welche ich in der Klasse welche Erbt redeklariert habe, indem ich Funktionen aus der vererbenden Klasse aufrufe? Oder lande ich hier immer in der Basisklasse und deren Variablen? Irgendwie macht das für mich grade keinen Sinn