![]() |
Vererbung von TObjectList
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:
Diese vererbt an:
function TMyDeviceList.GetCount: Integer;
begin result := FList.Count; end;
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:
lande ich aber in der übergeordneten Klasse.
var myCount := PCListSettings.Count;
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 :shock::pale: |
AW: Vererbung von TObjectList
Doch, es macht perfekt Sinn und ist auch genau so richtig, wie du es beobachtest hast. Das ist eigentlich eine der Stärken von Vererbung, dass du Verhalten (Methoden) und Daten (Variablen/Felder) aus der Klasse mit drin hast, von der du erbst.
Delphi-Quellcode:
ist keine Zauberei, das gibt nur zurück, wie viele Elemente in der Liste drinstecken. Das ist ein
GetCount()
Delphi-Quellcode:
genau wie auch in deiner abgeleiteten
TMyDeviceList
Delphi-Quellcode:
- Es war nicht nötig, das
TPCListSettings
Delphi-Quellcode:
virtuell zu machen und nochmal redundant zu
GetCount()
Delphi-Quellcode:
n, und du hast das richtigerweise auch nicht noch mal gemacht.
override
Du kannst mit unterschiedlichen Sichtbarkeitsmodifikatoren (in Delphi
Delphi-Quellcode:
und
private
Delphi-Quellcode:
) steuern, ob Unterklassen die Methoden und Daten der Elternklasse sehen und aufrufen können dürfen.
protected
Ich bin mir sicher, dass es viele gute Delphi-Tutorials gibt, die das Konzept von Objektorientierung und dabei die Vererbung gut erklären. PS: Bonuspunkte für dich, dass du nicht versucht hast, direkt eine Unterklasse von
Delphi-Quellcode:
zu erstellen - Ich sehe das so oft, raufe mir dann immer die (wenigen) Haare und denke an
TObjectList<TMyDeviceListItem>
![]() |
AW: Vererbung von TObjectList
Zitat:
Mach das so:
Code:
FList erzeugst Du im constructor von TBaseDeviceList<T> als
TBaseDeviceList<T> = class (TGenericSettings)
strict private var FList: TObjectList<T>; private function GetCount: Integer; published property Count: Integer read GetCount; end; TMyDeviceLList = class(TBaseDeviceList<TMyDeviceListItem>) end; TPCListSettings = class(TBaseDeviceList<TPCListItem>) end;
Delphi-Quellcode:
FList := TObjectlist<T>.Create;
|
AW: Vererbung von TObjectList
@peterbelow
ach verdammt, klar!:oops: Danke dir! Stehe heute glaube ich einfach mordsmäßig auf dem Schlauch... |
AW: Vererbung von TObjectList
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 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