2016-07-04 13 views
0

私のプロジェクトにはいくつか問題があります。私はprivate clsBUS_DEMO prop_DEMOC#でReflectionを使用してPrivate Propertyのメソッドを呼び出す方法は?

clsBUS_DEMOようprivateプロパティから1つのメソッドを呼び出したい

は名前がpublic void SayHello()されているメソッドを持っています。

これは、プログラムがprop_DEMO

誰もがこのことについて私を助けることができますを見つけることができないので、私のコード

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

pnullあるのですか?

+0

SayHello()はプロパティではなく、メソッドです。後のプロパティはprop_DEMOです。これはclsBUS_DEMOインスタンスを返します。その上でSayHello()を呼び出すことができます – LordWilmore

+0

はい、メソッドです。 これは私のようなものです'PropertyInfo p = this.GetType()。GetProperty(" prop_DEMO ");' 'MethodInfoメソッド= 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);

ありがとうございます!

関連する問題