2010-11-10 10 views
9

Duplicar posibles:
Determine if a type is static¿Cómo saber si un tipo es una clase estática?

duplicados deDetermine if a type is static

¿Hay una propiedad/atributo que pueda inspeccionar para ver si un System.Type es una clase estática?

puedo hacer esto indirectamente, probando que la Type tiene métodos estáticos, y no hay métodos de instancia que las heredado de System.Object, sin embargo no lo hace sentir limpia (He la sospecha de que me falta algo y esta no es una definición lo suficientemente rigurosa de static class).

¿Hay algo que me falta en el tipo que me dirá categóricamente esta es una clase estática?

¿O es static class C# sintaxis azúcar y no hay forma de expresarlo en IL?

Gracias
BW

+2

determinar si un tipo es estática: http://stackoverflow.com/questions/1175888/determine-if-a-type-is-static –

+0

Es sobre todo sintaxis de C#. ¿Para qué necesitas detectarlo? – Gabe

+0

@CD: ¿Cómo diablos extrañé eso, busqué extensamente antes de publicar la pregunta. Maestro, tu búsqueda-fu es mayor que la mía :) –

Respuesta

12

sí, lo que necesita para poner a prueba tanto para IsAbstract y IsSealed. Una clase no estática nunca puede ser ambas cosas. No es fantástico, pero funciona.

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)) 
      { 
      } 

pero puede estar allí es una clase con estos atributos, pero no es estática

5

A nivel de IL cualquier clase estática es abstracta y sellado. Así que usted puede hacer algo como esto:

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