2010-11-10 18 views
9

Powiel możliwe:
Determine if a type is staticJak określić, czy typ jest klasą statyczną?

DuplikatDetermine if a type is static

Czy istnieje właściwość/atrybut mogę sprawdzić, aby zobaczyć, czy System.Type jest klasa statyczna?

mogę to zrobić pośrednio, poprzez testowanie, że Type ma metody statyczne, oraz metody instancji nie wykraczające poza te odziedziczone System.Object, jednak nie czuć czyste (Mam skradanie podejrzenie czegoś mi brakuje i to nie jest wystarczająco rygorystyczna definicja static class).

Czy jest coś, czego mi brakuje na typie, który kategorycznie powie mi, to jest klasa statyczna?

C# jest cukrem składowym i nie ma sposobu, aby wyrazić to w IL?

Dzięki
BW

+2

ustalić, czy typ jest statyczna: http://stackoverflow.com/questions/1175888/determine-if-a-type-is-static –

+0

To głównie składnia C#. Do czego to jest potrzebne? – Gabe

+0

@CD: Jak, do cholery, tęskniłem za tym, szukałem obszernie przed opublikowaniem pytania. Mistrzyni, twoje wyszukiwanie jest większe niż moje :) –

Odpowiedz

12

tak, trzeba przetestować zarówno IsAbstract i IsSealed. Klasa nie statyczna nigdy nie może być jedną i drugą. Nie fantastyczne, ale działa.

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)) 
      { 
      } 

ale może istnieje klasa o to atrybuty, ale to nie jest statyczna

5

Na poziomie IL każda klasa statyczna jest abstrakcyjna i uszczelnione. Więc można zrobić coś takiego:

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