> 백엔드 개발 > C++ > C#에서 한 유형이 다른 유형의 하위 유형인지 정확하게 확인하려면 어떻게 해야 합니까?

C#에서 한 유형이 다른 유형의 하위 유형인지 정확하게 확인하려면 어떻게 해야 합니까?

Barbara Streisand
풀어 주다: 2025-01-09 15:17:41
원래의
174명이 탐색했습니다.

How Can I Accurately Determine if One Type Is a Subtype of Another in C#?

특정 유형이 다른 유형의 하위 유형인지 정확하게 확인하는 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: 객체 지향이지만 제한이 있음

isas 키워드도 유형 검사에 사용할 수 있지만 유형 자체가 아닌 객체 인스턴스에 대해 작동합니다. 이는 정적 코드 분석에서의 적용 가능성을 제한합니다.

결론: 정확도 향상을 위한 방법 결합

안타깝게도 거짓양성 결과를 가져오거나 개체 참조를 요구하지 않고 하위 유형 검사 개념을 완전히 포착하는 단일 기본 제공 방법은 없습니다. 가장 신뢰할 수 있는 방법은 Type.IsSubclassOf 메서드와 명시적인 동일성 검사를 결합하는 것입니다.

<code class="language-csharp">bool IsSameOrSubclass(Type potentialBase, Type potentialDescendant)
{
    return potentialDescendant.IsSubclassOf(potentialBase) || potentialDescendant == potentialBase;
}</code>
로그인 후 복사

이 사용자 정의 방법은 동일한 유형의 경우를 포함하여 유형이 다른 유형의 하위 유형인지 여부를 판별하는 간결하고 정확한 방법을 제공합니다.

위 내용은 C#에서 한 유형이 다른 유형의 하위 유형인지 정확하게 확인하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿