Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Generische TList mit IInterface verwenden (https://www.delphipraxis.net/193622-generische-tlist-mit-iinterface-verwenden.html)

TheFrog 21. Aug 2017 18:30

Delphi-Version: 10 Seattle

Generische TList mit IInterface verwenden
 
Hallo zusammen,

ich stehe gerade etwas auf dem Schlauch mit generischen Listen!

Ich habe derzeit folgende Deklaration:

Delphi-Quellcode:
FList: TList<IMyInterface>;


D.h. diese generische Liste soll Items vom Typ IMyInterface aufnehmen.

Frage:
Wird beim Einfügen eines neuen Items mittels FList.Add() der ReferenceCount des eingefügten Items erhöht oder nicht?

Ist vielleicht die TList nicht geeignet im Zusammenhang mit Interfaces?

Vielen Dank, Hans.

Aviator 21. Aug 2017 18:48

AW: Generische TList mit IInterface verwenden
 
Doch klar kannst du damit Interface Instanzen speichern. Die gehen auch nicht verloren, wenn sonst keine Referenz darauf zeigt.

Zur Not mach dir eine Funktion in das Interface, die dir den Reference Count ausgibt. Dann solltest du Gewissheit haben. :thumb:

TheFrog 21. Aug 2017 19:03

AW: Generische TList mit IInterface verwenden
 
Danke für die Antwort!

Ich habe mal den RefCount wie vorgeschlagen ausgegeben, nachdem ich Items eingefügt habe. Dieser ist wirklich > 0.

War mir nicht wirklich sicher, da ich im Internet nichts Aussagekräftiges dazu gefunden habe.

jaenicke 21. Aug 2017 19:54

AW: Generische TList mit IInterface verwenden
 
Intern benutzt eine TList<T> ein array of T. Das ist alles typsicher, nicht wie früher bei TList mit Casts, so dass alle Typen auch korrekt behandelt werden.

TiGü 22. Aug 2017 14:25

AW: Generische TList mit IInterface verwenden
 
Ich will ja nicht stänkern, aber hätte man das nicht durch simples Debuggen auch rausfinden können? F7 sei als magische Taste genannt (Debug-DCU-Option eingeschaltet natürlich).

TheFrog 23. Aug 2017 09:29

AW: Generische TList mit IInterface verwenden
 
Hätte man vielleicht rausfinden können ....

Habe mir bei der Frage nichts gedacht ... wenn jemand auf sowas schon mal gestoßen ist, dann ist es mit Ja oder Nein beantwortet.

himitsu 23. Aug 2017 09:39

AW: Generische TList mit IInterface verwenden
 
Die normale TList ist nur eine Liste mit saudoofen Pointern.
Die generische TList<> kennt den Typ, hat statt dem Pointer einen passenden Speicher und verwaltet die einzelnen Felder so, wie eine ganz normale Variable dieses Typs,
und beim Ein-/Auslesen wird die Speicherverwaltung und auch sowas wie eine Referenzzählung automatisch korrekt behandelt.
Wie bereits erwähnt, wird intern ein
Delphi-Quellcode:
array of TDeinType
verwendet.

TheFrog 23. Aug 2017 09:49

AW: Generische TList mit IInterface verwenden
 
Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz