> 백엔드 개발 > C++ > C#에서 모든 파생 유형을 효율적으로 찾으려면 어떻게 해야 합니까?

C#에서 모든 파생 유형을 효율적으로 찾으려면 어떻게 해야 합니까?

Mary-Kate Olsen
풀어 주다: 2025-01-01 10:57:11
원래의
735명이 탐색했습니다.

How Can I Efficiently Find All Derived Types in C#?

파생 유형 찾기: 효율적이고 포괄적인 접근 방식

소프트웨어 개발에서는 특정 기본 유형에서 파생된 모든 유형을 식별하는 것이 중요할 수 있습니다. . 할당 가능성 확인과 관련된 일반적인 접근 방식은 성능이나 우아함 측면에서 최적이 아닐 수 있습니다.

Linq 기반 솔루션

보다 효율적이고 구문적으로 간결한 접근 방식 Linq를 활용하는 것입니다. 다음 코드 조각은 기본 유형 B에서 상속되는 모든 유형을 찾는 Linq 쿼리를 보여줍니다.

    var listOfBs = (
                from domainAssembly in AppDomain.CurrentDomain.GetAssemblies()
                // alternative: from domainAssembly in domainAssembly.GetExportedTypes()
                from type in domainAssembly.GetTypes()
                where typeof(B).IsAssignableFrom(type)
                // alternative: && type != typeof(B)
                // alternative: && ! type.IsAbstract
                // alternative: where type.IsSubclassOf(typeof(B))
                select type).ToArray();
로그인 후 복사

가독성 향상을 위한 Fluent API

가독성 및 유지 관리 용이성 향상 , 위의 쿼리는 Fluent를 사용하여 리팩터링될 수 있습니다. API:

   var listOfBs = AppDomain.CurrentDomain.GetAssemblies()
                // alternative: .GetExportedTypes()
                .SelectMany(domainAssembly => domainAssembly.GetTypes())
                .Where(type => typeof(B).IsAssignableFrom(type)
                // alternative: => type.IsSubclassOf(typeof(B))
                // alternative: && type != typeof(B)
                // alternative: && ! type.IsAbstract
                ).ToArray();
로그인 후 복사

고려 사항 및 개선 사항

이 Linq 기반 접근 방식은 여러 가지 장점을 제공합니다.

  • 유형 로드: 쿼리는 어셈블리 수준 유형 로딩을 사용합니다. 이는 모든 유형을 반복하는 것보다 더 효율적입니다. 애플리케이션 도메인.
  • 제네릭 처리: 리플렉션을 활용하여 제네릭 유형을 처리하도록 쿼리를 조정할 수 있습니다.
  • 추가 필터링: 추가 필터는 다음과 같습니다. 추상 클래스를 제외하거나 결과를 공개로 제한하도록 적용됩니다. type.

결론

이 Linq 기반 솔루션은 지정된 기본 유형의 모든 파생 유형을 검색하는 성능이 뛰어나고 확장 가능한 수단을 제공합니다. 다재다능함과 유연성 덕분에 다양한 사용 사례에 적응할 수 있습니다.

위 내용은 C#에서 모든 파생 유형을 효율적으로 찾으려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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