Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Prism [.Net] TypeOf(Klasse) polymorph instanzieren (https://www.delphipraxis.net/35584-%5B-net%5D-typeof-klasse-polymorph-instanzieren.html)

maximov 9. Dez 2004 12:12


[.Net] TypeOf(Klasse) polymorph instanzieren
 
Moin,

wenn ich unter delphi.net einen meta-typ (&Type), einer bestimmten klasse, habe; Kann man daraus irgendwie eine instanze erstellen, oder ist dies nur mit meta-klassen möglich?

Das problem ist, dass man attribute nur mit konstanten ausdrücken erstellen kann. Meta-classen gelten leider nicht als konstant, typen hingegen schon. Was soll das?

Delphi-Quellcode:
type
  MyObject = class (&object)
  public
    constructor Create; virtual;
  end;

  MyClass = class of MyObject ;

...

  [MyAttributeTest(MyObject )] // geht nicht, weil nicht konstant
  [MyAttributeTest(typeOf(MyObject))] // geht
Deshalb die frage, ob ich aus dem typ eine instanze erstellen kann. Oder habt ihr andere ideen?

[edit=fkerber]Neu gespeichert wg. Code-Highlighting. Mfg, fkerber[/edit]

lizzard 9. Dez 2004 12:33

Re: [.Net] TypeOf(Klasse) polymorph instanzieren
 
Hi -

aus dem Typ eine Instanz geht so (angenommen, die Variable typ sei vom Typ System.Type):

Delphi-Quellcode:
var o : MyObject;
...
o:=MyObject(System.Activator.CreateInstance(typ));
So bauen wir Plugins zusammen, die Idee mit den Attributen ist auch interessant. Was genau willst du denn für Objekte übergeben? Woher kommen denn dann die dynamischen Attributwerte?

Viele Grüße
Phil

maximov 9. Dez 2004 12:46

Re: [.Net] TypeOf(Klasse) polymorph instanzieren
 
Zitat:

Zitat von lizzard
Hi -

...

So bauen wir Plugins zusammen, die Idee mit den Attributen ist auch interessant. Was genau willst du denn für Objekte übergeben? Woher kommen denn dann die dynamischen Attributwerte?

Viele Grüße
Phil

Danke!

Der dynamische attributwert ist ja die übergebene klasse, oder eben der typ. Ich will zB. die klasse für einen PropertyDescriptor definieren, der seine einstellungen dann aus weiteren attributen holt. Zusammen mit einem typeConverter kann man den PropertyGrid, dann lustige sachen unterjubeln. Würde auch ohne 'Custom'-PropertyDescriptor pro propertiy gehen, aber dann hat man noch schönere möglichkeiten die property zu verbiegen

Wenn ich da eine saubere sache habe, werde ich es vielleicht auch in die CodeLib stellen. zB. interessant wenn man Anwendung-einstellungs-properties mit schönes DisplayNamen versehen, lokaliesieren oder subProperties haben will. etc.

:-D

maximov 9. Dez 2004 13:32

Re: [.Net] TypeOf(Klasse) polymorph instanzieren
 
Zitat:

Zitat von lizzard
Delphi-Quellcode:
var o : MyObject;
...
o:=MyObject(System.Activator.CreateInstance(typ));

Mit dieser möglichkeit scheint ein aufruf des virtuellen konstruktor jedoch ausgeschlossen. Besteht eine chance, dass dies irgendwie geht? Denn als delphi programmierer möchte man natürlich ungern auf virtuelle konstruktoren verzichten.

Oder sollte man eine fabrik zwischen schalten?

maximov 10. Dez 2004 10:25

Re: [.Net] TypeOf(Klasse) polymorph instanzieren
 
OK! Habs geschnallt :-D .Net sucht sich den best passenden konstruktor, zu der übergebenen ArgList *g* Also ist es doch möglich polymorphe konstruktoren, mit hilfe des meta-typs, zu instanzieren.

Danke nochmal :thumb:

lizzard 10. Dez 2004 15:08

Re: [.Net] TypeOf(Klasse) polymorph instanzieren
 
Jetzt bist du mir zuvor gekommen - jaja, .NET ist da find ich sehr angenehm, Reflection ist - wie auch in Java - ein echtes Göttergeschenk, finde ich.

Happy Coding!
Phil

maximov 10. Dez 2004 15:35

Re: [.Net] TypeOf(Klasse) polymorph instanzieren
 
Zitat:

Zitat von lizzard
Jetzt bist du mir zuvor gekommen - jaja, .NET ist da find ich sehr angenehm, Reflection ist - wie auch in Java - ein echtes Göttergeschenk, finde ich...

Find ich auch. Dagegen wirkt die win32 RTTI wie ein schlechter scherz :stupid: auch wenn sie ihren zweck erfüllt. Und attribute sind ja wohl nur geil :thumb:^3


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:20 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