문제

.NET (2.0)에서 반사를 사용하여 과부하 메소드를 호출하는 방법이 있습니까? 공통 기본 클래스에서 파생 된 클래스를 동적으로 인스턴스화하는 응용 프로그램이 있습니다. 호환성을 위해이 기본 클래스에는 동일한 이름의 2 가지 방법, 하나는 매개 변수가 있고 하나는없는 방법이 포함됩니다. 호출 메소드를 통해 매개 변수가없는 메소드를 호출해야합니다. 지금, 내가 얻는 것은 모호한 방법을 호출하려고한다는 오류입니다.

네, I. ~할 수 있었다 객체를 기본 클래스의 인스턴스로 캐스트하고 필요한 방법을 호출하십시오. 결국 그 ~ 할 것이다 발생하지만 지금은 내부 합병증으로 인해 허용되지 않습니다.

어떤 도움이든 좋을 것입니다! 감사.

도움이 되었습니까?

해결책

원하는 방법을 지정해야합니다.

class SomeType 
{
    void Foo(int size, string bar) { }
    void Foo() { }
}

SomeType obj = new SomeType();
// call with int and string arguments
obj.GetType()
    .GetMethod("Foo", new Type[] { typeof(int), typeof(string) })
    .Invoke(obj, new object[] { 42, "Hello" });
// call without arguments
obj.GetType()
    .GetMethod("Foo", new Type[0])
    .Invoke(obj, new object[0]);

다른 팁

예. 메소드를 호출하면 원하는 오버로드와 일치하는 매개 변수를 전달합니다.

예를 들어:

Type tp = myInstance.GetType();

//call parameter-free overload
tp.InvokeMember( "methodName", BindingFlags.InvokeMethod, 
   Type.DefaultBinder, myInstance, new object[0] );

//call parameter-ed overload
tp.InvokeMember( "methodName", BindingFlags.InvokeMethod, 
   Type.DefaultBinder, myInstance, new { param1, param2 } );

다른 방법 으로이 작업을 수행하는 경우 (즉, Memberinfo를 찾아 호출하여 호출함으로써) 올바른 것을 얻을 수 있도록주의하십시오. 매개 변수가없는 오버로드가 처음 발견 될 수 있습니다.

System.type []를 사용하는 getMethod 오버로드를 사용하고 빈 유형을 전달하십시오 [];

typeof ( Class ).GetMethod ( "Method", new Type [ 0 ] { } ).Invoke ( instance, null );
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top