> 백엔드 개발 > C++ > 런타임에 결정된 유형으로 일반 메서드를 호출하려면 어떻게 해야 합니까?

런타임에 결정된 유형으로 일반 메서드를 호출하려면 어떻게 해야 합니까?

Linda Hamilton
풀어 주다: 2024-12-30 14:53:16
원래의
1005명이 탐색했습니다.

How Can I Call Generic Methods with Runtime-Determined Types?

런타임에 결정된 유형으로 일반 메소드 호출

이 문제는 컴파일 타임에 알 수 없는 유형 매개변수를 사용하여 일반 메소드를 호출하려고 할 때 발생합니다. . 일반적인 메서드 호출은 컴파일러가 수행하는 유형 안전성 검사에 의존하지만 유형이 런타임에만 사용 가능한 경우 대체 접근 방식이 필요합니다.

반사 기반 솔루션

제공된 코드 예제의 맥락에서:

public void Method<T>() where T : class {}
public void AnotherMethod()
{
    ...
    foreach (var interface in interfaces)
    {
        Method<interface>(); // Compile error!
    }
}
로그인 후 복사

컴파일 시간 유형을 우회하려면 확인:

  1. Type.GetMethod를 사용하여 개방형 일반 메서드를 검색합니다.:

    MethodInfo method = typeof(Test).GetMethod("Method");
    로그인 후 복사
  2. 일반 메소드 MakeGenericMethod:

    MethodInfo genericMethod = method.MakeGenericMethod(interface);
    로그인 후 복사
  3. Invoke를 사용하여 메서드 호출:

    genericMethod.Invoke(null, null); // No target or arguments in this case
    로그인 후 복사

완벽한 예

프로세스를 명확히 하려면 수정된 다음 코드 샘플을 고려하세요.

using System;
using System.Linq;
using System.Reflection;

namespace Sample
{
    interface IFoo { }
    interface IBar { }

    class Program
    {
        public static void CallMe<T>()
        {
            Console.WriteLine("Type of T: {0}", typeof(T));
        }

        static void Main()
        {
            var types = typeof(Program).Assembly.GetTypes().Where(t => t.Namespace == "Sample");

            var methodInfo = typeof(Program).GetMethod("CallMe");

            foreach (var type in types)
            {
                var genericMethodInfo = methodInfo.MakeGenericMethod(type);
                genericMethodInfo.Invoke(null, null);
            }
        }
    }
}
로그인 후 복사

이 예에서는 일반 CallMe 메서드가 Sample 네임스페이스에 있는 유형을 기반으로 동적으로 호출됩니다. .

위 내용은 런타임에 결정된 유형으로 일반 메서드를 호출하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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