如何测试给定类型是否是静态类?

时间:2010-10-08 06:07:10

标签: c#

var types=from m in System.Reflection.Assembly.Load("System").GetTypes()
                  where m.IsClass
                  where // something to check whether or not the type is a static class.
                  select m;

我想从结果中过滤掉任何静态类。

3 个答案:

答案 0 :(得分:6)

var types = from m in System.Reflection.Assembly.Load("System").GetTypes()
            where m.IsClass && m.IsAbstract && m.IsSealed
            select m;

来自this thread

编辑:检查m.IsSealed

答案 1 :(得分:2)

无论你做什么都将基于启发式 - 在IL级别没有特定的“这个类是静态的”。并且无法保证C#和VB编译器在未来版本中如何实现静态/模块。

好吧,静态类没有公共构造函数,并且会被密封,所以以下内容可能就足够了:

    var types=from m in System.Reflection.Assembly.GetExecutingAssembly().GetTypes()
              where m.IsClass && (!m.IsSealed || m.GetConstructors().Any())
              select m;

答案 2 :(得分:1)

您需要检查班级是否为密封和摘要 CLR不知道静态类,但它确实支持密封的抽象类,即使你不能显式编译它们,静态类也正在编译成密封的抽象类。