如何在 C# 中使用反射调用 Private 属性 的方法?

How to call Method of Private Property using Reflection in c#?

我的项目有一些问题。

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

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

这是我的代码

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

pnull 因为程序找不到 prop_DEMO

谁能帮我解决这个问题?

调用私有方法属性?不确定我是否理解你想要什么,让代表你反对的 class 会很有用。你的意思是调用一个 属性 那个 returns 一个对象然后调用那个对象的方法吗?

无论如何,我认为有很多关于该主题的信息,例如: 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);
}

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!");
        }
    }

好的伙计们!

我完成了:)

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

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

谢谢大家!