2010-03-30 4 views
2

인터페이스에서 상속하는 클래스가 있습니다. 이 인터페이스는 호출 코드에서 구독하고 싶은 이벤트를 정의합니다. 나는 두 가지 시도를했지만, 모두 거짓으로 변한다. (나는 그것이 사실임을 안다.) 클래스가 특정 인터페이스를 구현하는지 확인하려면 어떻게해야합니까? 여기 일반 클래스가 인터페이스에서 상속되었는지 확인

내가 무엇을 시도했다입니다 (참고, 해당 개체가하는 MyInterface를 구현 일부만 컨트롤의 배열에 저장하는 MyInterface를 구현하는 UserControl을은 - 그것은됩니다 NOT NULL) :

if (this.controls[index].GetType().IsSubclassOf(typeof(MyInterface))) 
    ((MyInterface)this.controls[index]).Event += this.Handler; 
if (this.controls[index].GetType().IsAssignableFrom(typeof(MyInterface))) 
    ((MyInterface)this.controls[index]).Event += this.Handler; 
아무 소용이
if (this.controls[index].GetType() == typeof(MyInterface)) 
    ((MyInterface)this.controls[index]).Event += this.Handler; 

모든


.

답변

6
if (typeof(MyInterface).IsAssignableFrom(this.controls[index].GetType())) 
    ((MyInterface)this.controls[index]).Event += this.Handler; 

방금 ​​IsAssignableFrom이 반전되었습니다.

if (this.controls[index] is MyInterface) 
2

내가 밀도가되고 할 수도 있지만 그냥 수행 할 수 없습니다 귀하의 경우를 들어


그러나,이 테스트를 할 수있는 가장 방법은 성능과 선명도 개선을 위해 다음과 같다 :

MyInterface foo = this.controls[index] as MyInterface; 
if (foo != null) { /* do stuff */ } 

(물론 실제 MyInterface이 이름 I로 시작해야한다)

관련 문제