我需要访问Private字段中的公共函数。
实施例
public partial class Form1 : Form
{
MainControl mainControl = new MainControl();
public Form1()
{
InitializeComponent();
var frame = mainControl.GetType().GetField("CustomControl", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
frame.GetType().GetMethod("Display").Invoke(mainControl, new object[] { });
}
}
public class MainControl
{
public MainControl()
{
CustomControl = new CustomControl();
}
CustomControl CustomControl;
}
public class CustomControl
{
public CustomControl()
{
}
public void Display()
{
MessageBox.Show("Displayed");
}
}
这里我需要在CustomControl类中调用Display函数。
但我采用上述方法获得例外。任何人都可以帮我吗?
答案 0 :(得分:1)
你似乎不太了解反思。要致电Display
,您需要执行以下步骤:
CustomControl
字段设为FieldInfo
CustomControl
mainControl
的值
Type
CustomControl
MethodInfo
Type
获取CustomControl
Display
CustomControl
您只完成了第一步,然后继续获取您刚刚获得的字段类型,这只是typeof(FieldInfo)
,然后您尝试从Display
获取FieldInfo
。 FieldInfo
没有这样的方法。
我已经方便地制作了这段代码,以便每行对应上面的一个步骤。
var fieldInfo = mainControl.GetType().GetField("CustomControl", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
var valueOfField = fieldInfo.GetValue(mainControl);
var customControlType = fieldInfo.FieldType;
var methodInfo = customControlType.GetMethod("Display");
methodInfo.Invoke(valueOfField, new object[] {});