나는 반사 isInstance() 방법에 대한 is
및 instanceof
에 대한 as
,하지만 알고? 다음자바의 isInstance에 C#을 상당() 란 무엇입니까?
답변
C에서 # 자바 obj.getClass().isInstance(otherObj)
의 등가는 다음
bool result = obj.GetType().IsAssignableFrom(otherObj.GetType());
참고하면서 .getClass()
.getType()
VS 통해 obj
(의 런타임 타입의 객체 (자바 java.lang.Class
≣ C# System.Type
)에 자바와 C 모두 # 작동 C#의 IsAssignableFrom
다른 System.Type
객체를 기대하는 반면), 자바의 isInstance
는, 인수로서 객체를합니다.
그냥 내 머리 위로 떨어져, 당신은 또한 할 수있는 : 더 나은 실적을 것이다
bool result = ((obj as MyClass) != null)
확실하지. 난 당신이 캐스트의 결과를 사용하고 당신이 할 경우 as
을 사용하지 않으려는 경우 :
bool result = (obj is MyClass); // Better than using 'as'
상속을 사용하는 클래스에도 작동합니까? 당신이 여기에 테스트 –
네 그렇습니다 ('새로운 아이() Parent'이다)는 클래스 사용자 상속 작동합니다. 고마워. –
위에 보여 정확히 어떻게, –
따라 다름, is
를 사용하는 벤치 마크에 다른 사람에게 그것을 떠날거야.
if(foo is Bar) {
return (Bar)foo;
}
대신에 : 당신은 좀처럼 쓰고 싶지 코드 아래
var bar = foo as Bar;
if(bar != null) {
return bar;
}
는 IsAssignableFrom
에 대안이 될 수 있습니다.
parentObject.GetType().IsInstanceOfType(inheritedObject)
MSDN의 Type.IsInstanceOfType 설명을 참조하십시오.
참고 일지 어떨지는 유형이 아닌 오브젝트를, 그래서 당신은 실제로 OtherObj.getType을 위해()가 필요합니다. – FlySwat
감사합니다 존 - 기억해! 위키입니다! 나는 실수를 바로 잡는 사람들에 대해 분개하지 않습니다. –
의 비정상적 키워드 (또한 자바의 isAssignable 방법이) 왜 재미있는 ... 자바, "instanceof를"JVM을 취급 특별히, 분명히 매우 매우 빠르고, 설명 할 수있다. –