簡體   English   中英

如何在C#中使用反射調用私有方法?

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

大家好!

我受夠了 :)

我只是創建Property get{} set{}並使用此代碼:D

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

謝謝大家!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM