2010-02-01 5 views
3

.NET에서 GetType 함수를 사용하면 개체의 구체적인 클래스 형식을 반환합니다. 문제는 내가 런타임까지 유형이 어떻게 될지 모르겠다.하지만 어떤 추상 클래스가 파생되는지 (나는 적절한 클래스를 생성하기 위해 추상적 인 팩토리를 사용하고 있음) 알 수있다.클래스가 파생되는 추상 클래스 형식 가져 오기

어떻게 실제 추상 클래스 유형을 얻을 수 있습니까? 심지어 가능할까요?

+0

"어떤 추상 클래스가 파생되는지 알고 있다면"왜 추상 클래스를 얻어야합니까? 캐스팅은 옵션이 아닌가요? –

답변

12

Type.BaseType은 현재 유형이 파생 된 유형을 알려줍니다. 당신은 Type.BaseTypeType.IsAbstracttrue 일 때까지 재귀 적으로 호출 할 수 있습니다.

static class TypeExtensions { 
    public static Type GetFirstAbstractBaseType(this Type type) { 
     if (type == null) { 
      throw new ArgumentNullException("type"); 
     } 
     Type baseType = type.BaseType; 
     if (baseType == null || baseType.IsAbstract) { 
      return baseType; 
     } 
     return baseType.GetFirstAbstractBaseType(); 
    } 

사용법 :

Type abstractBase = typeof(Derived).GetFirstAbstractBaseType(); 
+0

"첫 번째 추상 부모"에 대한 +1 설명. –

+1

ABC가 발견되지 않으면'null'을 리턴하는 다른'Type' 메소드와 더 일관성이 있습니다. (예 : BaseType, GetNestedType, GetElementType 등). –

+0

@ 280Z28 : 좋은 지적. 감사! – jason

0

난 당신이 Type 클래스 오프 BaseType 재산을 찾고있다 생각합니다. 이것은 현재 타입이 직접 상속받는 타입을 가져옵니다.