如何在c#中使用Reflection调用私有属性的方法?

时间:2016-07-04 08:07:34

标签: c# reflection propertyinfo

我的项目有些问题。

我想从private属性中调用一个方法,例如private clsBUS_DEMO prop_DEMO

clsBUS_DEMO有一个方法,名称为public void SayHello()

这是我的代码

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

pnull,因为程序无法找到prop_DEMO

有人可以帮我这个吗?

3 个答案:

答案 0 :(得分:0)

调用私有财产的方法?不确定我是否理解了你想要的东西,让代表你的对象更有用。你的意思是调用一个返回一个对象的属性然后调用该对象的方法吗?

无论如何,我认为那里有很多关于该主题的信息,例如: Find a private field with Reflection? http://deltanorge.cloudapp.net/

%

答案 1 :(得分: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!");
        }
    }

答案 2 :(得分:0)

好的伙计们!

我已经完成了:)

我只是创建属性get{} set{}并使用此代码:D

  

PropertyInfo p = this.GetType()。GetProperty(“LoaiSP_BUS”,BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

全部谢谢!