Ermitteln, ob ein Typ ist statisch
Sagen wir, ich habe eine Type
genannt type
.
Will ich bestimmen, wenn ich dies mit meiner Art (ohne die tatsächlich tun dies, um jede Art):
Wenn type
ist System.Windows.Point
dann könnte ich dies tun:
Point point1 = new Point();
Aber wenn type
ist System.Environment
dann wird dieser nicht Fliegen:
Environment environment1 = new Environment(); //wrong
Also, wenn ich bin, Durchlaufen alle sichtbaren Typ in einer assembly wie kann ich skip all die Typen, die nicht erstellen Sie eine Instanz wie die zweite? Ich bin Art von neuen Reflexion also ich bin nicht so toll mit der Terminologie noch nicht. Hoffentlich das, was ich versuche zu tun, ist hier ziemlich klar.
Du musst angemeldet sein, um einen Kommentar abzugeben.
static
Klassen deklariert sindabstract
undsealed
auf IL-Ebene. So können Sie überprüfenIsAbstract
Eigentum zu behandeln, sowohlabstract
Klassen undstatic
Klassen in one go (für deinen Anwendungsfall).Jedoch
abstract
Klassen sind nicht die einzigen Typen, die Sie nicht direkt instanziieren. Sie sollten überprüfen Sie für Dinge wie Schnittstellen (ohne denCo
- Attribut) und Arten, die nicht über einen Konstruktor verfügen, zugänglich durch den aufrufenden code.Wäre dies eine ausreichende Prüfung für C#, da eine abstrakte Klasse darf nicht versiegelt oder statisch in C#. Jedoch, Sie müssen vorsichtig sein beim Umgang mit CLR-Typen aus anderen Sprachen.
können Sie die Suche für öffentlichen contructors wie diese,
Oder wenn Sie nur daran interessiert, parameterlosen Konstruktor können Sie
abstract
Klasse kann einepublic
Konstruktor. Sie können nicht unbedingt eine Instanz von einer Klasse in die Körper Ihrerif
- Anweisung. Sie erhaltenMemberAccessException
.Ich denke, dies sollte funktionieren.
Dies ist ein Weg, um alle öffentlichen contstuctors aller Typen in einer assembly.