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

本文关键字:调用 属性 方法 反射 | 更新日期: 2023-09-27 17:54:21

我的项目遇到了一些问题。

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

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

这是我的代码

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

pnull,因为程序找不到prop_DEMO

有谁能帮我一下吗?

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

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

好了!

I'm done:)

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

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

谢谢!

调用私有属性的方法?不确定我是否理解你想要的,有一个代表你的对象的类会很有用。你的意思是调用返回一个对象的属性,然后调用该对象的一个方法吗?

无论如何,我认为有很多关于这个话题的信息,例如:如何使用反射来调用私有方法?找到一个私人领域与反射?

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