我的项目遇到了一些问题。
我想从private
属性中调用一个方法,比如private clsBUS_DEMO prop_DEMO
clsBUS_DEMO
有一个方法,名称为public void SayHello()
。
这是我的代码
PropertyInfo p = this.GetType().GetProperty("SayHello");
p
是null
,因为程序找不到prop_DEMO
clsBUS_DEMO prop_DEMO
不是属性,它是Field
。你需要使用GetFields来获取它,而且因为它是private
,你需要传递BindingFlags.NonPublic
和BindingFlags.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);
}