2008-11-11 4 views

답변

47

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는, 인수로서 객체를합니다.

+1

참고 일지 어떨지는 유형이 아닌 오브젝트를, 그래서 당신은 실제로 OtherObj.getType을 위해()가 필요합니다. – FlySwat

+3

감사합니다 존 - 기억해! 위키입니다! 나는 실수를 바로 잡는 사람들에 대해 분개하지 않습니다. –

+1

의 비정상적 키워드 (또한 자바의 isAssignable 방법이) 왜 재미있는 ... 자바, "instanceof를"JVM을 취급 특별히, 분명히 매우 매우 빠르고, 설명 할 수있다. –

2

그냥 내 머리 위로 떨어져, 당신은 또한 할 수있는 : 더 나은 실적을 것이다

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

확실하지. 난 당신이 캐스트의 결과를 사용하고 당신이 할 경우 as을 사용하지 않으려는 경우 :

172
bool result = (obj is MyClass); // Better than using 'as' 
+0

상속을 사용하는 클래스에도 작동합니까? 당신이 여기에 테스트 –

+2

네 그렇습니다 ('새로운 아이() Parent'이다)는 클래스 사용자 상속 작동합니다. 고마워. –

+0

위에 보여 정확히 어떻게, –

36

따라 다름, is를 사용하는 벤치 마크에 다른 사람에게 그것을 떠날거야.

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

대신에 : 당신은 좀처럼 쓰고 싶지 코드 아래

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

IsAssignableFrom에 대안이 될 수 있습니다.

parentObject.GetType().IsInstanceOfType(inheritedObject) 

MSDN의 Type.IsInstanceOfType 설명을 참조하십시오.