如何在 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");
p
是 null
因为程序找不到 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.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!");
}
}
好的伙计们!
我完成了:)
我只是创建 属性 get{}
set{}
并使用此代码 :D
PropertyInfo p = this.GetType().GetProperty("LoaiSP_BUS", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
谢谢大家!
我的项目有一些问题。
我想从 private
属性 调用一个方法,例如 private clsBUS_DEMO prop_DEMO
clsBUS_DEMO
有一个方法,名称是 public void SayHello()
。
这是我的代码
PropertyInfo p = this.GetType().GetProperty("SayHello");
p
是 null
因为程序找不到 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.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!");
}
}
好的伙计们!
我完成了:)
我只是创建 属性 get{}
set{}
并使用此代码 :D
PropertyInfo p = this.GetType().GetProperty("LoaiSP_BUS", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
谢谢大家!