2010-11-10 18 views
9

Olası Çoğalt:Determine if a type is staticBir Türün statik bir sınıf olup olmadığını nasıl anlarsınız?

ait
Determine if a type is static

yinelenen bir System.Type statik sınıf olup olmadığını görmek için kontrol edebilir bir özellik/nitelik var mı? Ben, Type statik yöntemleri ve System.Object miras olanlar dışında hiçbir örnek yöntemler bulduğunu söyledi test ederek, dolaylı olarak yapabilirsiniz ancak temiz (Ben kuşku sessizce özlüyorum bir şeyi hissetmez

ve bu, static class'un kesin bir tanımı değildir).

Bana kategorik olarak söyleyeceği türde eksik bir şey var mı? Bu bir statik sınıf?

Veya static class C# sözdizimi şeker ve IL'de ifade etmenin bir yolu yok mu?

Teşekkür
BW

+2

belirleyin: Yani böyle bir şey yapabilir http://stackoverflow.com/questions/1175888/determine-if-a-type-is-static –

+0

Çoğunlukla C# sözdizimi var. Onu ne için tespit etmeniz gerekiyor? – Gabe

+0

@CD: Bunu nasıl özledim, soruyu göndermeden önce yoğun bir şekilde aradım. Master, arama-fu benimkinden daha büyüktür :) –

cevap

12

evet, sen IsAbstract ve IsSealed ikisi için test etmek gerekir. Statik olmayan bir sınıf her ikisi de olamaz. Fantastik değil ama çalışıyor. bağlıyor ancak herhangi statik sınıf soyut ve mühürlü olan IL düzeyinde

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

ama olabilecek bir sınıf yoktur. Bir tür statik ise

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

statik değil ile

İlgili konular