.NET에서 GetType 함수를 사용하면 개체의 구체적인 클래스 형식을 반환합니다. 문제는 내가 런타임까지 유형이 어떻게 될지 모르겠다.하지만 어떤 추상 클래스가 파생되는지 (나는 적절한 클래스를 생성하기 위해 추상적 인 팩토리를 사용하고 있음) 알 수있다.클래스가 파생되는 추상 클래스 형식 가져 오기
어떻게 실제 추상 클래스 유형을 얻을 수 있습니까? 심지어 가능할까요?
.NET에서 GetType 함수를 사용하면 개체의 구체적인 클래스 형식을 반환합니다. 문제는 내가 런타임까지 유형이 어떻게 될지 모르겠다.하지만 어떤 추상 클래스가 파생되는지 (나는 적절한 클래스를 생성하기 위해 추상적 인 팩토리를 사용하고 있음) 알 수있다.클래스가 파생되는 추상 클래스 형식 가져 오기
어떻게 실제 추상 클래스 유형을 얻을 수 있습니까? 심지어 가능할까요?
Type.BaseType
은 현재 유형이 파생 된 유형을 알려줍니다. 당신은 Type.BaseType
로 Type.IsAbstract
이 true
일 때까지 재귀 적으로 호출 할 수 있습니다.
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();
"첫 번째 추상 부모"에 대한 +1 설명. –
ABC가 발견되지 않으면'null'을 리턴하는 다른'Type' 메소드와 더 일관성이 있습니다. (예 : BaseType, GetNestedType, GetElementType 등). –
@ 280Z28 : 좋은 지적. 감사! – jason
난 당신이 Type 클래스 오프 BaseType 재산을 찾고있다 생각합니다. 이것은 현재 타입이 직접 상속받는 타입을 가져옵니다.
"어떤 추상 클래스가 파생되는지 알고 있다면"왜 추상 클래스를 얻어야합니까? 캐스팅은 옵션이 아닌가요? –