![]() |
Re: Konstruktor Create Virtual oder nicht?
Zitat:
In den neuen Delphi Versionen (afair: ab D2005) gibt es gleichfalls static Variablen - auch hier wird der Präfix "class" verwendet. Zitat:
|
Re: Konstruktor Create Virtual oder nicht?
Dass der Schalter bereits ab Delphi4 (oder früher hab kein D1-D3) als veraltet gebrandmarkt und Konstanten keine Variablen sind (auch wenn man sie verändern kann) stört Dich dabei nicht? Naja meine Meinung über Compilerschaltermagie habe ich hier im Forum schon zu genüge geäußert. Dass es sowas in D2006 gibt, find ich allerdings schick.
|
Re: Konstruktor Create Virtual oder nicht?
Zitat:
|
Re: Konstruktor Create Virtual oder nicht?
Ganz ehrlich, ich bin noch nieeeee in die Verlegenheit gekommen, diesen Schalter bedienen zu müssen. Entweder reicht eine globale Variable mit dem entsprechenden Zuriffsschutz (Singelton, CriticalSection) oder das Design kann geändert werden, wobei der Zugriffsschutz müsste auch bei einer Konstante realisiert werden.
|
Re: Konstruktor Create Virtual oder nicht?
Zitat:
|
Re: Konstruktor Create Virtual oder nicht?
Hagen, Hagen... mir musst du das mit Polymorphie, dynamisch, virtuell und und und nicht erklären...
Und ich habe es eben nochmal ausprobiert: man kriegt TSecondClass raus. Ein Aufruf von TBaseclass.create kriegt als allerersten Parameter die Klassenreferenz mit, die in diesem Fall TSecondclass ist, und den Konstruktor haben wir beauftragt, Klassenreferenz.ClassName anzuzeigen. WARUM IN ALLER WELT SOLLTE JETZT TBASECLASS ANGEZEIGT WERDEN? Wir haben ausdrücklich TSecondClass als Klassenreferenz übergeben, und dieser Name wird angezeigt. Mein Testcode:
Delphi-Quellcode:
Zurück zum Konstruktorzeiger:
program Project2;
{$APPTYPE CONSOLE} uses SysUtils; type TMClass=class constructor create; end; TAClass=class(TMClass) end; TMClassClass=class of TMClass; constructor TMClass.create; begin writeln(ClassName); end; var MClass:TMClassClass; Instanz:TMClass; begin MClass:=TAClass; Instanz:=MClass.create; Instanz.free; readln; end. Zitat:
[edit] Er kennt WMTCreateObject zwar, aber alle vier Interface-VMT-Konstanten sind, im Gegensatz zu den Klassen-VMT-Konstanten, als veraltet markiert.[/edit] Dieses konstruktive Streitgespräch beginnt, mir Spaß zu machen... Gruß Apollonius |
Re: Konstruktor Create Virtual oder nicht?
Stop mal, ich kann mich auch selber austricksen.
Wo ist deine TAClass.Create ? Also erstmal noch eine TAClass Create anlegen. In TMClass Create nun ShowMessage('1'); und in TAClass Create ShowMessage('2'; Nun MClass := TAClass; und MClass.Create; Was zeigt er bei dir an ? '1' oder '2' ? Nach diesem Test TMClass.Create als virtual und TAClass.Create als override; Und dann nochmal schauen was ShowMessage sagt. Und wenn ich am Montag von meiner Dienstreise zurück bin, dann diksutieren wir nochmal was ich oben gesagt habe, ok ;) Metaklassen -> bedingt virtuelle Konstrukoren -> damit man die Klassen individuell initialisieren kann. Gruß Hagen |
Re: Konstruktor Create Virtual oder nicht?
Ich glaube, dass bedeutet, dass wir die ganze Zeit aneinander vorbeigeredet haben: Ich meinte, dass TBaseclass.create mit der Klassenreferenz TSecondclass aufgerufen wird, und du sagtest, dass TBaseclass.create aufgerufen wird. Das widerspricht sich wohl nicht.
Ich dachte, dass du in deinen Konstruktor ebenfalls den Classname (deshalb meine Ergänzung mit hartcodierten Namen) anzeigen ließest. Zitat:
Aber zurück zu den statischen Konstruktoren - in der VMT oder nicht, das ist hier die Frage. Kannst du mir die Bedeutung von VMTCreateObject erklären, denn bei meinen eigenen Nachforschungen bin ich nicht darauf gestoßen? Apollonius |
Re: Konstruktor Create Virtual oder nicht?
Ich würde schon gerne die Bedeutung von VMTCreateObject wissen. Deshalb hole ich diesen Thread mal wieder hoch.
|
Re: Konstruktor Create Virtual oder nicht?
Noch ein Versuch: Was bedeutet VMTCreateObject?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:13 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