2009-04-24 2 views
12

리플렉션을 사용하여 정적 메서드를 호출 할 때 ref로 매개 변수를 전달하는 방법은 무엇입니까?

리플렉션을 사용하여 객체에 정적 메서드를 호출하고 있습니다.

MyType.GetMethod("MyMethod", BindingFlags.Static).Invoke(null, new object[] { Parameter1, Parameter2 }); 

어떻게 값을 사용하는 대신 ref로 매개 변수를 전달합니까? 나는 그들이 기본적으로 가치 있다고 생각한다. 첫 번째 매개 변수 (배열의 "Parameter1")는 ref로 지정해야하지만 그 방법으로 전달하는 방법을 알 수는 없습니다.

답변

16

참조 매개 변수 (또는 C#에서)의 경우 reflection은 원본 매개 변수와 동일한 위치에있는 새 값을 개체 배열에 복사합니다. 해당 값에 액세스하여 변경된 참조를 볼 수 있습니다.

public class Example { 
    public static void Foo(ref string name) { 
    name = "foo"; 
    } 
    public static void Test() { 
    var p = new object[1]; 
    var info = typeof(Example).GetMethod("Foo"); 
    info.Invoke(null, p); 
    var returned = (string)(p[0]); // will be "foo" 
    } 
} 
1

당신이 Type.GetMethod를 호출하고 BindingFlagBindingFlags.Static 단지의를 사용하는 경우, 그것은 당신의 방법을 찾을 수 없습니다. 플래그를 제거하거나 BindingFlags.Public을 추가하면 정적 메소드가 검색됩니다.

public Test { public static void TestMethod(int num, ref string str) { } } 

typeof(Test).GetMethod("TestMethod"); // works 
typeof(Test).GetMethod("TestMethod", BindingFlags.Static); // doesn't work 
typeof(Test).GetMethod("TestMethod", BindingFlags.Static 
            | BindingFlags.Public); // works 
+0

네 말이 맞아. 감사. 내 원래 문제의 근원은 아니지만 문제는 여전히 남아 있습니다. – Deane

관련 문제