특정 유형이 다른 유형의 하위 유형인지 정확하게 확인하는 C#의 효과적인 방법
C#에서 유형을 다룰 때 유형 간의 관계를 결정해야 하는 경우가 많습니다. 일반적인 요구 사항은 유형이 다른 유형의 하위 클래스인지, 더 정확하게는 해당 클래스의 하위 유형인지 확인하는 것입니다.
IsSubclassOf: 부분 진실
Type.IsSubclassOf
메소드는 유형이 다른 유형의 하위 클래스인지 직접 확인하는 방법을 제공합니다.
<code class="language-csharp">typeof(SubClass).IsSubclassOf(typeof(BaseClass)); // 返回 true</code>
그러나 두 가지 유형이 동일한 경우 이 접근 방식은 실패합니다.
<code class="language-csharp">typeof(BaseClass).IsSubclassOf(typeof(BaseClass)); // 返回 false</code>
IsAssignableFrom: 더 넓지만 완벽하지는 않음
Type.IsAssignableFrom
접근 방식은 이 문제를 해결하지만 그 자체의 단점도 있습니다. 하위 클래스 또는 동일한 유형이 하위 유형임을 정확하게 나타내지만 관련되지 않은 유형에 대해 거짓양성을 반환할 수도 있습니다.
<code class="language-csharp">typeof(BaseClass).IsAssignableFrom(typeof(DerivedClass)); // 返回 true typeof(BaseClass).IsAssignableFrom(typeof(BaseClass)); // 返回 true typeof(int[]).IsAssignableFrom(typeof(uint[])); // 返回 true</code>
is and as: 객체 지향이지만 제한이 있음
is
및 as
키워드도 유형 검사에 사용할 수 있지만 유형 자체가 아닌 객체 인스턴스에 대해 작동합니다. 이는 정적 코드 분석에서의 적용 가능성을 제한합니다.
결론: 정확도 향상을 위한 방법 결합
안타깝게도 거짓양성 결과를 가져오거나 개체 참조를 요구하지 않고 하위 유형 검사 개념을 완전히 포착하는 단일 기본 제공 방법은 없습니다. 가장 신뢰할 수 있는 방법은 Type.IsSubclassOf
메서드와 명시적인 동일성 검사를 결합하는 것입니다.
<code class="language-csharp">bool IsSameOrSubclass(Type potentialBase, Type potentialDescendant) { return potentialDescendant.IsSubclassOf(potentialBase) || potentialDescendant == potentialBase; }</code>
이 사용자 정의 방법은 동일한 유형의 경우를 포함하여 유형이 다른 유형의 하위 유형인지 여부를 판별하는 간결하고 정확한 방법을 제공합니다.
위 내용은 C#에서 한 유형이 다른 유형의 하위 유형인지 정확하게 확인하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!