2010-11-10 10 views
9

Possible en double:
Determine if a type is staticComment savoir si un Type est une classe statique?

en double deDetermine if a type is static

Y at-il une propriété/attribut je peux vérifier pour voir si un System.Type est une classe statique?

Je peux le faire indirectement, en testant que le Type a des méthodes statiques, et pas des méthodes d'instance au-delà de celles héritées de System.Object, mais il ne veut pas se sentir propre (je suis un soupçon faufilant je manque quelque chose et ce n'est pas une définition assez rigoureuse de static class).

Y at-il quelque chose qui me manque sur le type qui va me dire catégoriquement c'est une classe statique?

Ou est static class C# sucre de syntaxe et il n'y a aucun moyen de l'exprimer en IL?

Merci
BW

+2

Déterminer si un type est statique: http://stackoverflow.com/questions/1175888/determine-if-a-type-is-static –

+0

Il est principalement C# syntaxe. De quoi avez-vous besoin pour le détecter? – Gabe

+0

@CD: Comment diable ai-je raté cela, j'ai beaucoup cherché avant de poster la question. Maître, votre search-fu est plus grand que le mien :) –

Répondre

12

oui, vous devez tester pour les IsAbstract et IsSealed. Une classe non statique ne peut jamais être les deux. Pas fantastique mais ça marche.

3
 if (typeof(C).Attributes.HasFlag(System.Reflection.TypeAttributes.Abstract) && 
      typeof(C).Attributes.HasFlag(System.Reflection.TypeAttributes.Sealed) && 
      typeof(C).Attributes.HasFlag(System.Reflection.TypeAttributes.Class)) 
      { 
      } 

mais peut-être il y a une classe avec cet attribut, mais ce n'est pas statique

5

Au niveau IL une classe statique est abstraite et scellé. Ainsi, vous pouvez faire quelque chose comme ceci:

Type myType = typeof(Form1); 
    if (myType.GetConstructor(Type.EmptyTypes) == null && myType.IsAbstract && myType.IsSealed) 
    { 
     // class is static 
    } 
Questions connexes