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;
我想从结果中过滤掉任何静态类。
答案 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不知道静态类,但它确实支持密封的抽象类,即使你不能显式编译它们,静态类也正在编译成密封的抽象类。