Einzelnen Beitrag anzeigen

Kishmet

Registriert seit: 29. Okt 2020
Ort: Großraum Stuttgart
34 Beiträge
 
Delphi 12 Athens
 
#1

Vererbung von TObjectList

  Alt 10. Jan 2024, 11:07
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

Geändert von Kishmet (10. Jan 2024 um 11:17 Uhr)
  Mit Zitat antworten Zitat