Yanıtlar:
Buradaki farklı cevapların iki farklı anlamı vardır.
Bir örnek olup olmadığı kontrol etmek istediğiniz takdirde tam bir tip daha sonra
if (c.GetType() == typeof(TForm))
gitmek için bir yoldur.
Eğer olup olmadığını bilmek istiyorsanız cbir örneğidir TForm veya alt sınıf daha sonra kullanım is/ as:
if (c is TForm)
veya
TForm form = c as TForm;
if (form != null)
Bu davranışlardan hangisini gerçekten istediğinizi açıklamakta fayda var.
isve asdesen eşleşmesi ile:if (x is TForm tf) {…
if(c is TFrom)
{
// Do Stuff
}
veya ca olarak kullanmayı planlıyorsanız TFormaşağıdaki örneği kullanın:
var tForm = c as TForm;
if(tForm != null)
{
// c is of type TForm
}
İkinci örneğin yalnızca bir kez ctür olup olmadığını kontrol etmesi gerekir TForm. Burada tür olup olmadığını kontrol edip döküm yaparsanız c, TFormCLR ekstra kontrolden geçer. İşte bir referans .
Edit: Çalıntı Jon Skeet
Yapmak isterseniz emin ctaşımaktadır TFormve devralan herhangi sınıfı TForm, daha sonra kullanılmak
if(c.GetType() == typeof(TForm))
{
// Do stuff cause c is of type TForm and nothing else
}
Evet, "is" anahtar kelimesi:
if (c is TForm)
{
...
}
MSDN'deki ayrıntılara bakın: http://msdn.microsoft.com/en-us/library/scekt9xw(VS.80).aspx
Bir nesnenin belirli bir türle uyumlu olup olmadığını kontrol eder. Örneğin, bir nesnenin dize türüyle şu şekilde uyumlu olup olmadığı belirlenebilir:
Ayrıca, bir şekilde aynı damarda
Type.IsAssignableFrom(Type c)
"C ve geçerli Tür aynı türü temsil ediyorsa veya geçerli Tür, c'nin miras hiyerarşisinde ise veya geçerli Tür, c'nin uyguladığı bir arabirim ise veya c, genel bir tür parametresi ve geçerli Tür ise c'nin kısıtlarından birini temsil eder. "
Buradan: http://msdn.microsoft.com/tr-tr/library/system.type.isassignablefrom.aspx
typeof(Class).IsAssignableFrom(object.getType())Java instanceofoperatörüne benzer .
T1.IsAssignableFrom(T2)döner truedurumlarda nerede asoperatör döner boş olmayan bir değeri, bu tür örnekleri verilen.
TForm olarak c kullanmak istiyorsanız, diğer cevaplardan biraz daha kompakt:
if(c is TForm form){
form.DoStuff();
}
Diğerlerinin de belirttiği gibi, "is" anahtar kelimesi. Ancak, daha sonra bu tür bir döküm yapacaksanız, örn.
TForm t = (TForm)c;
Sonra "as" anahtar sözcüğünü kullanmalısınız.
Örneğin TForm t = c as TForm.
Sonra kontrol edebilirsiniz
if(t != null)
{
// put TForm specific stuff here
}
İle birleştirmeyin çünkü bu yinelenen bir kontroldür.
bool isValid = c.GetType() == typeof(TForm) ? true : false;
veya daha basit
bool isValid = c.GetType() == typeof(TForm);
==). Belirli bir Türünüzün örneğin bir sealedSınıftan devralınmayacağını bilmediğiniz sürece mirası destekleyen nesne veya yönlendirilmiş dillerde . Ayrıca: (statik / sabit) boole değerleri döndüren üçlü bir operatörün kullanımı beni rahatsız ediyor, bir switchifade olsaydı daha az rahatsız olurdum .
instanceofve C # 'larisbunu yapmanın çok daha iyi yoludur.