私が知っているの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.ClassJava≣C#System.Type)で動作しますが、Javaはオブジェクトを引数として受け取りますが、C#は別のオブジェクトを期待します。obj.getClass().getType()isInstanceIsAssignableFromSystem.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の説明を参照してください。