2010-10-08 2 views
3
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

Это не поможет: http://stackoverflow.com/questions/ 1175888/define-if-a-type-is-static? – Patko

ответ

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

от this thread.

EDIT: Проверьте m.IsSealed

1

Вам нужно проверить, если класс запечатана и реферата.
CLR не знает статические классы, но он поддерживает закрытые абстрактные классы, и хотя вы не можете их явно скомпилировать, статические классы компилируются для запечатанных абстрактных классов.

2

Независимо от того, что вы делаете, это будет основано на эвристике - нет определенного «этого класса является статичным» на уровне IL. И нет никакой гарантии, что компиляторы C# и VB будут использовать статический/модуль в будущих выпусках.

Ну, статический класс не будет иметь никаких публичных конструкторов, и будет запечатан, так что следующее может быть достаточно:

var types=from m in System.Reflection.Assembly.GetExecutingAssembly().GetTypes() 
       where m.IsClass && (!m.IsSealed || m.GetConstructors().Any()) 
       select m; 
Смежные вопросы