2010-04-14 21 views
6

birçok soru yakın statik sınıfların bir listesini almak için, ama hiçbiri benim sorunu cevaplar. Tanımlanmış tüm Türleri zaten alıyorum, ancak IsStatic özelliği yok. 0 yapıcı saymak gerçekten yavaş ve işe yaramadı.Kullanım yansıması

Herhangi bir ipucu veya kod satırı? :-)

Chris

cevap

12

bir derlemesinden türlerini almak nasıl: Sonra

http://msdn.microsoft.com/en-us/library/system.reflection.assembly.aspx

GetTypes Method

: soyut ve aynı zamanda mühürlü olan sınıflar için

bak.

http://dotneteers.net/blogs/divedeeper/archive/2008/08/04/QueryingStaticClasses.aspx

ancak eş zamanlı olarak soyut ve mühürlü tip bayraklarını kullanarak sağlayan, ben .NET CLR statik sınıflar fikrini bilmediği bilgi bulabildiğim bloglarda aranıyor. Bu bayraklar, davranışlarını optimize etmek için CLR tarafından da kullanılır, örneğin mühürlü bayrak, sanal olmayanlar gibi mühürlü sınıfın çağrı sanal yöntemlerini kullanır. Aşağıdaki açıklama itibaren

: bir tür statik olup olmadığını Yani, bu yöntemi kullanabilirsiniz, sormak

, statik bir sınıf çağıran soyut, mühürlü sınıf nedir C#
IEnumerable<Type> types = typeof(Foo).Assembly.GetTypes().Where 
(t => t.IsClass && t.IsSealed && t.IsAbstract); 
+1

, bunu gibi sınıflar edinebilirsiniz: 'IEnumerable türleri = typeof (Foo) .Assembly.GetTypes() .Where (t => t.IsClass && t.IsSealed && t.IsAbstract); ' –

1

Statik sınıflar C#, değil Ortak Dil şartnamenin bir özelliğidir ve bu nedenle statik sınıf olduğunu belirtmek istiyorum Tip örneğinde meta veri kimse parçası var. Bununla birlikte, kapalı bir tür olup olmadığını ve devralınmamış üyelerinin tümü statik olup olmadığını kontrol edebilirsiniz. İşte

3

CLR'ye. Yani IsAbstract & & IsSealed'ye bakmanız gerekecek.

1

Aşağıdaki kontrolleri birleştirmeniz gerekir: Abstract, Sealed, BeforeFieldInit. Statik sınıf derlenmiş montaj aşağıdaki IL kodunu görebilirsiniz derler sonra: Yani Kevin'in cevabı verilmiş

.class public abstract auto ansi sealed beforefieldinit StaticClass 
    extends [mscorlib]System.Object 
{ 
}