>백엔드 개발 >C++ >리플렉션을 사용하여 .NET에서 올바른 오버로드된 일반 메서드를 선택하는 방법은 무엇입니까?

리플렉션을 사용하여 .NET에서 올바른 오버로드된 일반 메서드를 선택하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-11 13:31:42531검색

How to Select the Correct Overloaded Generic Method in .NET Using Reflection?

리플렉션을 사용하여 올바른 일반 방법 선택

과제: 오버로드된 일반 메소드 식별

.NET에서 여러 일반 메서드 오버로드가 있는 경우 리플렉션을 사용하여 올바른 버전을 선택하는 것이 어려울 수 있습니다. 예를 들어 System.Linq.Queryable 클래스의 정적 메서드에는 Where 메서드에 대한 두 가지 정의가 있습니다.

<code class="language-c#">static IQueryable<T> Where(this IQueryable<T> source, Expression<Func<T, bool>> predicate)
static IQueryable<T> Where(this IQueryable<T> source, Expression<Func<T, bool>> predicate)</code>
리플렉션의

메서드는 이러한 오버로드를 구별할 수 없기 때문에 이 작업에 충분하지 않습니다. GetMethod

해결책: 매개변수화된 대리자 사용

올바른 일반 방법을 선택하기 위해 매개변수화된 대리자를 생성하는 기술을 채택할 수 있습니다. 원하는 오버로드의 일반 개수 및 매개 변수 개수와 일치하는

또는 Action 대리자를 생성하여 컴파일 타임에 메서드를 선택할 수 있습니다. Func

예 1: 일반 유형과 단일 매개변수를 사용하는 메서드 선택: Where

<code class="language-c#">var method = new Action<object>(MyClass.DoSomething<object>);</code>

예 2: 두 개의 일반 유형과 두 개의 매개변수를 사용하는 메서드 선택: Where

<code class="language-c#">var method = new Action<object, object>(MyClass.DoSomething<object, object>);</code>
이 접근 방식을 사용하면 위험한 문자열이나 런타임 검색에 의존하지 않고도 필요한 방법을 얻을 수 있습니다.

MethodInfo 개체 가져오기

개체가 필요한 경우 대리자를 생성한 후 얻을 수 있습니다. MethodInfo

<code class="language-c#">var methodInfo = method.Method.MakeGenericMethod(type1, type2);</code>
정적 확장 방법

정적 확장 방법에는 약간 더 복잡한 접근 방식이 필요하지만 동일한 원칙이 적용됩니다.

<code class="language-c#">var method = new Func<IQueryable<object>, Expression<Func<object, bool>>, IQueryable<object>>(Queryable.Where<object>);

var methodInfo = method.Method.MakeGenericMethod(modelType);</code>
MethodInfo와 매개변수 유형 분리

때때로

개체와 매개변수 유형을 분리해야 할 수도 있습니다. MethodInfo

<code class="language-c#">var methodInfo = method.Method.GetGenericMethodDefinition();

methodInfo.MakeGenericMethod(type1, type2).Invoke(null, new object[] { collection });</code>
이 기술을 사용하면 클래스에서 인스턴스 메서드를 선택하고 이를 다양한 유형에 사용하기 위해 노출하는 등 복잡한 작업을 수행할 수 있습니다.

결론

매개변수화된 대리자를 사용하면

의 제한 사항을 우회하고 컴파일 타임에 올바른 일반 메서드를 선택할 수 있습니다. 이 접근 방식은 유형 안전성을 보장하고 불필요한 동적 조회를 방지합니다. GetMethod

위 내용은 리플렉션을 사용하여 .NET에서 올바른 오버로드된 일반 메서드를 선택하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.