【问题标题】:How to tell if a Type is a static class? [duplicate]如何判断 Type 是否是静态类? [复制]
【发布时间】:2010-11-15 21:25:38
【问题描述】:

可能重复:
Determine if a type is static

重复 Determine if a type is static

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

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

我在类型上是否遗漏了什么可以明确告诉我这是一个静态类

还是static class是c#语法糖,在IL中没有办法表达?

谢谢
体重

【问题讨论】:

  • 判断类型是否为静态:stackoverflow.com/questions/1175888/…
  • 主要是 C# 语法。你需要检测它做什么?
  • @CD:我怎么会错过这个,在发布问题之前我进行了广泛的搜索。主人,你的搜索量比我的大:)
  • @Gabe:我想自动生成直接映射到静态类的接口和实例类(例如 System.IO.File 中的文件和目录,以及我们代码库中的许多旧静态类。我我试图引入单元测试,这些是使用 Mocks 进行测试的主要障碍。如果可以,我将自动生成包装器,手动编码它们太多了。
  • 我第一次投票结束我自己的问题sigh

标签: c# .net reflection


【解决方案1】:

是的,您需要同时测试IsAbstractIsSealed。非静态类永远不能两者兼有。不是很棒,但它有效。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案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) )
                  {
                  }
      

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

      【讨论】:

        猜你喜欢
        • 2013-06-04
        • 2019-09-14
        • 1970-01-01
        • 2019-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-16
        • 1970-01-01
        相关资源
        最近更新 更多