Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi [OOP]: TClassList / TObjectList (https://www.delphipraxis.net/29369-%5Boop%5D-tclasslist-tobjectlist.html)

mytar 8. Sep 2004 11:35


[OOP]: TClassList / TObjectList
 
  • Was ist der Unterschied zu TClassList und TObjectList.
    Ich erkenne keinen Verwendungsunterschied.
    Ich bitte um eine kurze Erklärung.
  • In welchen Fällen ist TClassList, in welchen TObjectList zu empfehlen?
    Ich bitte um ein paar Beispiele.
Danke :-D

Phoenix 8. Sep 2004 11:38

Re: [OOP]: TClassList / TObjectList
 
[ ] Du erwartest tatsächlich eine Antwort auf diese Frage.
[X] Du willst Dich erstmal mit dem Unterschied zwischen Klassen und Objekten vertraut machen.

:zwinker: Nee, mal im Ernst: Eine Klasse ist ja kein Objekt. Eine Classlist beinhaltet Klassen, eine ObjectList nunmal Objekte.

Jelly 8. Sep 2004 11:52

Re: [OOP]: TClassList / TObjectList
 
Zitat:

Zitat von Phoenix
Nee, mal im Ernst: Eine Klasse ist ja kein Objekt.

Das wär aber mal was ganz Neues... Von was meinst du denn wäre TClass abgeleitet :zwinker:
Natürlich ist eine Klasse ein Objekt.

Gruß,

Chewie 8. Sep 2004 11:54

Re: [OOP]: TClassList / TObjectList
 
Zitat:

Zitat von Jelly
Natürlich ist eine Klasse ein Objekt.

Hm... In Java oder .NET: Vielleicht. Aber auf keinen Fall in ObjectPascal. Eine Klasse ist quasi ein Bauplan, ein Objekt die Umsetzung davon.

Jelly 8. Sep 2004 11:59

Re: [OOP]: TClassList / TObjectList
 
Zitat:

Zitat von Delphi Hilfe
Die in der Unit System deklarierte Klasse TObject ist der absolute Vorfahr aller anderen Klassentypen. Sie definiert nur einige wenige Methoden einschließlich eines Grundkonstruktors und -destruktors. In System ist außer TObject auch noch der Klassenreferenztyp TClass deklariert.

Delphi-Quellcode:
TClass = class of TObject;
Wenn Sie in der Deklaration eines Klassentyps keinen Vorfahren angegeben, erbt die Klasse direkt von TObject. Aus diesem Grund ist die Deklaration

Delphi-Quellcode:
TMyClass = class
 ...
end;
identisch mit

Delphi-Quellcode:
type TMyClass = class(TObject)
 ...
end;
Die zweite Variante verdient jedoch aus Gründen der Lesbarkeit den Vorzug.

Das interpretier ich als ganz deutlich, daß TObject der Urvater aller Klassen ist, und jede Klasse mindestens von TObject abgeleitet ist.

Gruß

Luckie 8. Sep 2004 12:03

Re: [OOP]: TClassList / TObjectList
 
Dem widerspricht ja auch keiner. Nur du jast gesagt dass eine Klasse identisch mit einem Objekt ist.
Zitat:

Natürlich ist eine Klasse ein Objekt.
Das ist aber nicht so. Ein Objekt ist die Instanz einer Klasse im Speicher. Dich bringt das Schlüssel wort Delphi-Referenz durchsuchenclass anscheinend etwas durcheinander.

mytar 8. Sep 2004 12:17

Re: [OOP]: TClassList / TObjectList
 
Bitte nicht [ot], ich kenne den Unterschied zwischen Klasse und Objekt.

Ich möchte eigentlich nur Beispiele wissen, wo man eine Instanz von TClassList oder eine von TObjectList verwendet.

Eigentlich müsste man ja immer nur Objekte speichern, also Instanz von TObjectList, oder nicht?

Chewie 8. Sep 2004 12:27

Re: [OOP]: TClassList / TObjectList
 
TClassList dürfte für Metaklassen geeignet sein, TObjectList für normale Objekte.

maximov 8. Sep 2004 12:35

Re: [OOP]: TClassList / TObjectList
 
Zitat:

Zitat von Chewie
TClassList dürfte für Metaklassen geeignet sein, TObjectList für normale Objekte.

Genau. So wie es Objekt-referenzen gibt, gibt es auch klassen-referenzen. type TMyClass = class of TmyObject. Du kannst zB. eine liste mit 10 verschiedensten metaklassen erstellen und in einem ritsch die TClassList durchgehen und, ohne die kalsse explizit zu kennen, 10 verschiebene object instanzieren:
Delphi-Quellcode:
ClassList[i].create
:stupid:

Phoenix 8. Sep 2004 13:00

Re: [OOP]: TClassList / TObjectList
 
Zitat:

Zitat von Jelly
Zitat:

Zitat von Delphi Hilfe
Delphi-Quellcode:
TClass = class of TObject;
Wenn Sie in der Deklaration eines Klassentyps keinen Vorfahren angegeben, erbt die Klasse direkt von TObject. Aus diesem Grund ist die Deklaration
Delphi-Quellcode:
TMyClass = class
 ...
end;
identisch mit
Delphi-Quellcode:
type TMyClass = class(TObject)
 ...
end;
Die zweite Variante verdient jedoch aus Gründen der Lesbarkeit den Vorzug.

Das interpretier ich als ganz deutlich, daß TObject der Urvater aller Klassen ist, und jede Klasse mindestens von TObject abgeleitet ist.

Das schon. Aber eine 'Class' ist nicht von TObject abeleitet, sondern nur der Klassentyp.
Deswegen steht da ja auch:
Delphi-Quellcode:
TClass = class of TObject;
, wobei es hier auf das 'class of' ankommt.

Zur ClassList bzw. ObjectList:

Delphi-Quellcode:
TMyClass = Class(TObject)
end;
TMyClassClass = class of TMyClass;
...

var
   i: integer;
   Klassen: TClassList;
   Objekte: TObjectList;
begin
   Klassen := TClassList.Create;
   i := Klassen.Add(TMyClassClass);

   Objekte := TObjectList.Create;
   Objekte.Add( Klassen[i].Create );
end;
Das hat zur Folge, das in der Liste Objekte nun genau ein Element vom Typ TMyClass ist, das über ein Element der Liste Klasse vom Typ TMyClassClass instanziert wurde.

TClassList wird daher auch gerne für ClassFactories eingesetzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz