私が知っているのis
とas
のためにinstanceof
、しかし、どのような反射程度でisinstance()メソッド?
私が知っているのis
とas
のためにinstanceof
、しかし、どのような反射程度でisinstance()メソッド?
回答:
obj.getClass().isInstance(otherObj)
C#のJavaに相当するものは次のとおりです。
bool result = obj.GetType().IsAssignableFrom(otherObj.GetType());
JavaとC#はどちらも(via vs )のランタイムタイプオブジェクト(java.lang.Class
Java≣C#System.Type
)で動作しますが、Javaはオブジェクトを引数として受け取りますが、C#は別のオブジェクトを期待します。obj
.getClass()
.getType()
isInstance
IsAssignableFrom
System.Type
is
対照的に、タイプ名が必要でした。これはOPが望んでいたものです:Javaのと同等ですisInstance
。ばかげた数の賛成にもかかわらず、他の答えは単に間違っています。
bool result = (obj is MyClass); // Better than using 'as'
new Child() is Parent
)
is
場合によっては、キャストの結果を使用したくない場合は使用し、使用する場合は使用しas
ます。あなたはほとんど書きたくない:
if(foo is Bar) {
return (Bar)foo;
}
の代わりに:
var bar = foo as Bar;
if(bar != null) {
return bar;
}
私の頭のすぐ上で、あなたはまたすることができます:
bool result = ((obj as MyClass) != null)
どちらが優れているかわからない。ベンチマークは他の誰かに任せます:)
以下のコードは、の代わりになりIsAssignableFrom
ます。
parentObject.GetType().IsInstanceOfType(inheritedObject)
MSDNのType.IsInstanceOfTypeの説明を参照してください。