Java'nın isInstance () ile C # eşdeğeri nedir?


Yanıtlar:


52

Java'nın obj.getClass().isInstance(otherObj)C # ' daki karşılığı aşağıdaki gibidir:

bool result = obj.GetType().IsAssignableFrom(otherObj.GetType());

Hem Java hem de C # bir (via vs ) çalışma zamanı türü nesnesi (Java java.lang.Class≣ C # System.Type) üzerinde çalışırken , Java'nın bir nesneyi argüman olarak aldığını , C # 'ların ise başka bir nesne beklediğini unutmayın .obj.getClass().getType()isInstanceIsAssignableFromSystem.Type


1
Not IsAssignableFrom bir nesne değil bir Type alır, bu yüzden aslında OtherObj.getType () yapmanız gerekir.
FlySwat

3
Teşekkürler Jon - ve unutmayın, bu bir wiki! İnsanların hatalarımı düzeltmesine kızmam.
Konrad Rudolph

1
ilginç ... java'da, JVM "instanceof" u özel olarak ele alır, görünüşe göre çok hızlıdır, bu da neden alışılmadık bir anahtar kelime olduğunu açıklayabilir (java'da bir isAssignable yöntemi de vardır).
Michael Neale

Bu yöntem neden daha okunaklı olan "eşittir" operatöründen daha iyidir?
Timothy Gonzalez

@TimothyGonzalez Çünkü farklı bir şey yapıyor. İki değişkenin aynı türe sahip olup olmadığını test eder. isaksine bir tür adı gerektirdi. OP'nin istediği buydu: Java'nın eşdeğeri isInstance. Diğer cevap, gülünç sayıda olumlu oylara rağmen tamamen yanlış.
Konrad Rudolph


39

Bağlıdır, isalçı sonucunu kullanmak istemiyorsanız kullanın ve kullanırsanız kullanın as. Neredeyse hiç yazmak istemezsin:

if(foo is Bar) {
    return (Bar)foo;
}

Onun yerine:

var bar = foo as Bar;
if(bar != null) {
    return bar;
}

2

aklımın ucunda, şunları da yapabilirsiniz:

bool result = ((obj as MyClass) != null)

Hangisinin daha iyi performans göstereceğinden emin değilim. Bunu kıyaslama yapmak için başka birine bırakacağım :)


2

Aşağıdaki kod alternatif olabilir IsAssignableFrom.

parentObject.GetType().IsInstanceOfType(inheritedObject)

MSDN'de Type.IsInstanceOfType açıklamasına bakın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.