2016-07-04 3 views
0

프로젝트에 몇 가지 문제가 있습니다.C#에서 리플렉션을 사용하여 개인 속성의 메서드를 호출하는 방법?

내가 private clsBUS_DEMO prop_DEMO

clsBUS_DEMO처럼 private 속성에서 하나 개의 메소드를 호출 할 것은 이름 public void SayHello()하는 방법이있다.

이 프로그램은 prop_DEMO

아무도 이것에 대해 좀 도와 줄래 찾을 수 없기 때문에

PropertyInfo p = this.GetType().GetProperty("SayHello"); 

pnull 내 코드?

+0

SayHello()는 속성이 아니므로 메서드입니다. 이후 속성은 clsBUS_DEMO 인스턴스를 반환하는 prop_DEMO이며 해당 SayHello()를 호출 할 수 있습니다. – LordWilmore

+0

예, 메서드입니다. 이제 이걸 가지고있다'PropertyInfo p = this.GetType(). GetProperty ("prop_DEMO");''MethodInfo method = p.GetType(). GetMethod ("SayHello");' –

+0

그래도 null이 반환됩니다. –

답변

0

clsBUS_DEMO prop_DEMO이 속성 아니라,이 Field입니다. 그것을 얻으려면 GetFields를 사용해야하고 private이므로 BindingFlags.NonPublicBindingFlags.Instance을 전달해야합니다. 여기

당신이 그것을

static void Main(string[] args) 
    { 
     Bar bar = new Bar(); 
     Foo foo = (Foo)bar.GetType().GetField("a", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(bar); 
     foo.GetType().GetMethod("ShowMessage").Invoke(foo,new object[] { }); 
    } 
    public class Bar 
    { 
     private Foo a; 
     public Bar() 
     { 
      a = new Foo(); 
     } 
    } 
    public class Foo 
    { 
     public void ShowMessage() 
     { 
      Console.WriteLine("Hello World!"); 
     } 
    } 
0

사유 재산 신고 방법은? 당신이 원하는 것을 이해했다면, 당신을 대표하는 클래스를 갖는 것이 유용 할 것입니다. 개체를 반환하는 속성을 호출 한 다음 해당 개체의 메서드를 호출한다는 의미입니까?

은 어쨌든, 나는 많은 정보는, 예를 들어, 거기에 그 주제에 대한 있다고 생각 : How do I use reflection to invoke a private method? Find a private field with Reflection?

class MyClass1 
{ 
    public MyClass1() 
    { 
     Prop = new MyClass2(); 
    } 

    public MyClass2 Prop { get; set; } 
} 

class MyClass2 
{ 
    private int Test() 
    { 
     return 5; 
    } 
} 

static void Main(string[] args) 
{ 
    var obj = new MyClass1(); 
    var obj2 = obj.Prop; 

    var propInfo = obj.GetType().GetProperty("Prop"); 

    var obj2Reflection = propInfo.GetValue(obj, null); 
    var dynMethod = obj2.GetType().GetMethod("Test", BindingFlags.NonPublic | BindingFlags.Instance); 
    var obj2Return = dynMethod.Invoke(obj2, null); 
} 
+0

예, 할 생각입니다. Google에서 검색 중이지만 스택을 얻을 수 있지만 속성을 얻을 때이 문제를 해결하는 방법을 찾을 수 없습니다. 그것은 단지 null을 반환합니다. 링크 해 주셔서 감사합니다. –

0

좋아 사람을 방법의 샘플입니다! . 내가

난 그냥 재산권 get{}set{} 작성하고이 코드를 사용 : 끝났어요

: D

PropertyInfo의 P = this.GetType() GetProperty를 ("LoaiSP_BUS을"BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

감사합니다!

관련 문제