2011-04-06 11 views
10

C#, içinde bir Type başlatılabilir olup olmadığını nasıl öğrenebilirim? Activator.CreateInstance özel durumundan kaçınmaya çalışıyorum.Tür eşlenip uygulanabilir olup olmadığını öğrenin

Şu anki yöntemim type.IsClass && !type.IsInterface, ancak bu soyut derslerde başarısız olabileceğinden endişeleniyorum vb. Ayrıca type.TypeInitializer == null numaralı telefonu kontrol etmeyi de düşündüm, ancak bunun da sorunsuz olup olmadığından emin değilim.

Type modelinin somut olup olmadığını öğrenmek için en basit/en etkili yol hangisidir?

+4

'type.IsAbstract' var. –

+1

"Güvenli" olması için GetConstructor() tarafından döndürülen ConstructorInfo nesnesindeki IsPublic ve benzeri özellikleri de kontrol etmesi gerekmez. Bilmiyorum. Ben soruyorum .. –

cevap

7

. Özel veya korumalı bir kurucu olabilir. Ya da varsayılan bir kurucu olmayabilir, sadece belirli argüman tiplerini alan kurucular olabilir. Bu konuda endişelenmeniz gerekiyorsa, kullanılmaması gerektiğinde mutlaka Activator.CreateInstance() kullanıyorsunuzdur. Sadece keyfi olarak nesneler inşa etmek sadece tahribat yaratabilir, ne tür yan etkilerin olabileceği hakkında hiçbir fikriniz yoktur. "FormatDisk" sınıfından kaçının.

Bir istisnanız arkadaşınız, varsayımlarınızın yanlış olduğunu söyler. .NET çerçevesini kasıtlı olarak istemeden durdurma.

+0

Bir arabirimin uygulama örnekleri oluşturuyorum, bu yüzden onlar hakkında bir şey biliyorum. Yine de uyarıyı takdir ediyorum. – user664939

+0

Mükemmel, o zaman istisnalar hakkında endişelenmenize ya da yanlışlıkla soyut bir sınıf oluşturmanıza gerek yok. İyi bilinen bir isim işi bitirir. –

+0

Varsayılan kurucu için denetleme hakkında nasıl giderim? – user664939

11

IsAbstract'u düşünün. Soyut ve statik sınıfı da ele alırdı. Ayrıca, diğer bir çok tuzak var da kontrol etmek isteyebilirsiniz: IsInterface

İlgili konular