9
votes

Utilisez la réflexion pour obtenir une liste de classes statiques

De nombreuses questions sont proches, mais aucune ne répond mon problème ...

Comment utiliser la réflexion dans C # 3.5 pour obtenir toutes les classes statiques d'un assemblage. Je reçois déjà tous les types définis, mais il n'y a pas de propriété iSstatique. Compter 0 Constructeurs est vraiment lent et ne fonctionnait pas non plus.

Toute pointe ou une ligne de code? : -)

chris


0 commentaires

4 Réponses :


1
votes

Les classes statiques sont une caractéristique de C # et non la spécification de langue commune, et il n'ya donc aucun élément de métadonnées sur une instance de type qui indiquerait que c'est une classe statique. Vous pouvez cependant vérifier s'il s'agit d'un type scellé et si tous ses membres non hérités sont statiques.


0 commentaires

17
votes

Voici comment vous obtenez des types d'un assemblage:

http://msdn.microsoft.com/en-us/library/system.reflection.assembly.aspx p>

getTypes méthode p>

alors: p>

Recherchez les classes qui sont Résumé et scellé en même temps. P>

http://dotneteers.net/blogs/divedeeper/archive/2008/08/04/QueryingSticClasses.aspx P>

Recherche dans des blogs Je pourrais trouver les informations que .NET CLR ne connaît pas l'idée de classes statiques, cependant permet d'utiliser simultanément les drapeaux de type abstrait et scellés. Ces drapeaux sont également utilisés par le CLR pour optimiser son comportement, par exemple, l'indicateur scellé est utilisé des méthodes virtuelles de classe scellée comme des non-virtuelles. Donc, pour demander si un type est statique ou non, vous pouvez utiliser cette méthode: p> blockquote>

du commentaire ci-dessous: P>

IEnumerable<Type> types = typeof(Foo).Assembly.GetTypes().Where
(t => t.IsClass && t.IsSealed && t.IsAbstract);


1 commentaires

Donc, donné la réponse de Kevin, vous pouvez obtenir les classes comme: iEnumerable types = typeof (foo). Assembly.getTypes (). Où (t => t.isclass && tsealed && t.isabstract) ;



4
votes

Qu'est-ce que C # appelle une classe statique, est une classe abstraite et scellée au CLR. Donc, vous auriez besoin de regarder Isabstract && Issé.


0 commentaires

1
votes

Vous devez combiner les chèques suivants: Résumé, scellé, avantfieldinit. Après compilation de la classe statique, vous pouvez voir après le code IL dans l'assemblage compilé:

.class public abstract auto ansi sealed beforefieldinit StaticClass
    extends [mscorlib]System.Object
{
}


0 commentaires