De nombreuses questions sont proches, mais aucune ne répond mon problème ... P>
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. P>
Toute pointe ou une ligne de code? : -) p>
chris p>
4 Réponses :
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. P>
Voici comment vous obtenez des types d'un assemblage:
http://msdn.microsoft.com/en-us/library/system.reflection.assembly.aspx 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);
Donc, donné la réponse de Kevin, vous pouvez obtenir les classes comme: iEnumerable
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é. P>
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 { }