원본 글은 GCDN에 게시된 글입니다. GCDN에서 통합 조정을 진행하고 현재는 제품 교환 등의 이유로 블로그가 폐쇄되어 유용한 내용을 이곳으로 옮겨왔습니다.
2009년 8월 13일 12시 29분 윙크
이 블로그를 작성하면서 CyljXu가 오늘 나에게 질문을 했습니다. 리플렉션을 통해 ref 또는 out 매개변수가 있는 메서드를 호출하는 방법은 무엇입니까? 다른 사람들도 이런 문제를 겪을 수 있다고 생각하여, 미래의 독자들이 검색할 수 있도록 기록해 두고 싶습니다.
이는 MSDN에 설명되어 있습니다. MethodBase.Invoke 메서드를 참조하세요.
공용 객체 호출(객체 obj, Object[] 매개변수)
비주얼 C++
공공의
: 가상 Object^ Invoke( Object^ obj, arrayJ#
공공의
최종 객체 호출(Object obj, Object[] 매개변수)
JScript
공공의
결정적인
기능
Invoke( obj : 객체, 매개변수 : Object[] ) : 객체
매개변수
obj 유형: System.Object
메서드나 생성자가 호출되는 개체입니다. 메소드가 정적이면 이 매개변수가 무시됩니다. 생성자가 정적인 경우 이 매개 변수는 Null 참조(Visual Basic의 경우 Nothing)이거나 생성자가 정의된 클래스의 인스턴스여야 합니다.
매개변수 유형: System.Object[]
호출할 메서드나 생성자의 매개변수 목록입니다. 이는 호출되는 메서드나 생성자의 매개 변수와 동일한 수, 순서 및 유형을 갖는 객체의 배열입니다. 매개 변수가 없는 경우 매개 변수는 Null 참조(Visual Basic의 경우 Nothing)이어야 합니다.
이 인스턴스가 나타내는 메서드나 생성자가 ref 매개 변수(Visual Basic의 경우 ByRef)를 사용하는 경우 이 함수를 사용하여 메서드나 생성자를 호출할 때 매개 변수에는 특별한 특성이 필요하지 않습니다. 배열의 개체가 값으로 명시적으로 초기화되지 않은 경우 개체에는 해당 개체 유형에 대한 기본값이 포함됩니다. 참조 유형 요소의 경우 값은 null 참조(Visual Basic의 경우 Nothing)입니다. 값 유형 요소의 경우 값은 특정 요소 유형에 따라 0, 0.0 또는 false입니다.
그러면 전달된 값을 어떻게 호출하고 처리합니까? 다음 예를 참조하세요.
1 클래스 프로그램 2 { 3 static void Main(string[] args) 4 { 5 문자열 내용 = "main"; //#1 변수 6 MethodInfo testMethod = typeof(Program).GetMethod("TestMethod", 7 BindingFlags.Static | BindingFlags.NonPublic); 8 if (testMethod != null) 9 {10 // 다음 방법은 콘텐츠를 다시 가져올 수 없습니다.11 // -------- ----------------12 testMethod.Invoke(null, new object[] { content /* #1 변수 */ });13 Console.WriteLine(content); // # 변수 1개, 출력은 다음과 같습니다: main14 // ---------------------------- ----15 16 17 object [] informArgs = new object[] { content /* #1 변수 */ };18 testMethod.Invoke(null, informArgs);19 content = (string)invokeArgs[0]; #2 변수, 호출 우회, content.20으로 설정 Console.WriteLine(content); // #2 변수, 출력: test21 }22 }23 24 static void TestMethod(ref string arg)25 {26 arg = "test "; // #2 변수, 메인 프로세스로 우회하고 싶습니다.27 }28 }
'불가능'을 '나는 가능'으로 바꾸는 아포스트로피가 되려면
------------------------------------- --
WinkingZhang의 블로그 ( http://winkingzhang.cnblogs.com )
GCDN( http://gcdn.grapecity.com/cs )
-