Biliyorum is
ve as
için instanceof
, ama reflektif isInstance () yöntemi ne olacak ?
Biliyorum is
ve as
için instanceof
, ama reflektif isInstance () yöntemi ne olacak ?
Yanıtlar:
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()
isInstance
IsAssignableFrom
System.Type
is
aksine 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ış.
bool result = (obj is MyClass); // Better than using 'as'
new Child() is Parent
)
Bağlıdır, is
alçı 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;
}
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 :)
Aşağıdaki kod alternatif olabilir IsAssignableFrom
.
parentObject.GetType().IsInstanceOfType(inheritedObject)
MSDN'de Type.IsInstanceOfType açıklamasına bakın .