如何判断Type是否是静态类?

时间:2010-11-10 13:43:33

标签: c# .net reflection

  

可能重复:
  Determine if a type is static

重复 Determine if a type is static

我是否可以检查属性/属性以查看System.Type是否为静态类?

我可以通过测试Type是否有静态方法,并且除了从System.Object继承的方法之外没有实例方法来间接地做到这一点,但它不会感觉干净(我怀疑我错过了一些东西,这不是static class)的严格定义。

在类型上是否有一些我会遗漏的东西会断然告诉我这是一个静态类

或者是static class c#语法糖并且没有办法在IL中表达它?

感谢
BW

3 个答案:

答案 0 :(得分:12)

是的,你需要测试IsAbstractIsSealed。非静态类永远不能同时存在。不太好但是有效。

答案 1 :(得分:6)

在IL级别,任何静态类都是抽象和密封的。所以你可以这样做:

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

答案 2 :(得分: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) )
            {
            }

但可能有一个具有此属性的类但它不是静态的