주어진 유형 (System.Type)이 특정 기본 클래스 (.NET)에서 상속되는지 여부를 어떻게 결정합니까?

StackOverflow https://stackoverflow.com/questions/129277

문제

이것은 쉬운 대답이 될 것입니다. 나는 단지 무언가를 놓치게 될 것입니다. 그러나 여기에 간다 ... 나는 유형이 있다면 (즉, 실제 시스템. 타입 ... 인스턴스가 아님) 내가 어떻게 말합니까? 다른 특정 기본 유형에서 물려 받습니까?

도움이 되었습니까?

해결책

사용 issubclassof 방법의 방법 System.type 수업.

다른 팁

한 가지를 명확히해야합니다 Type.IsSubTypeOf() 그리고 Type.IsAssignableFrom():

  • IsSubType() 돌아올 것입니다 true 주어진 유형이 지정된 유형에서 파생 된 경우에만. 돌아올 것입니다 false 주어진 유형 인 경우 이다지정된 유형.

  • IsAssignableFrom() 돌아올 것입니다 true 주어진 유형이 지정된 유형이거나 지정된 유형에서 파생 된 경우.

따라서 이것을 사용하여 비교하는 경우 BaseClass 그리고 DerivedClass (상속 BaseClass) 그 다음에:

BaseClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = FALSE
BaseClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE

DerivedClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = TRUE
DerivedClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE

편집 : 원하는 기본 유형이 인터페이스 인 경우 위의 솔루션이 실패합니다. 다음 솔루션은 클래스 또는 인터페이스 등 모든 유형의 상속에 대해 작동합니다.

// Returns true if "type" inherits from "baseType"
public static bool Inherits(Type type, Type baseType) {
    return baseType.IsAssignableFrom(type)
}

(반) 유용한 추출물 MSDN 기사:

인수] 및 현재 유형이 동일한 유형을 나타내거나 현재 유형이 [인수]의 상속 계층에 있거나 현재 유형이 [인수]가 구현되는 인터페이스 인 경우 또는 [ 인수]는 일반적인 유형 매개 변수이며 현재 유형은 [인수]의 제약 중 하나를 나타냅니다. 이러한 조건 중 어느 것도 참이 없거나 [인수]가 널리 참조 (Visual Basic에서는 아무것도 없음) 인 경우 false.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top