通过 属性 使用反射调用方法
Using reflection call a method through property
如何在下面的代码中使用反射调用 "MyMethod"。
我有一个现有的 C# 代码,它具有我不允许更改的预定义结构。我需要使用反射调用 class 中存在的方法。
在下面的代码中,“_instance”包含 "Foo" 的对象。我需要在 Consumer class.
中使用 "PropElementHighlighter" 属性 调用 "MyMethod"
使用 System.Reflection;
public class Foo
{
public void MyMethod(string Argument)
{
//some code
}
}
public class MainWindow
{
private Foo _instance;
public Foo PropElementHighlighter { get { return _instance; } }
}
public class Consumer
{
Type control = MainWindow.GetType();
PropertyInfo l_propInfo = control.GetProperty("PropElementHighlighter", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
MethodInfo l_HighlightMethodInfo = l_propInfo.PropertyType.GetMethod("MyMethod");
l_HighlightMethodInfo.Invoke(l_propInfo, new object[]{"Parameter1"});
}
调用方法时出现错误 "Object does not match target type."。
您收到错误消息是因为您在方法的对象中设置了 属性 信息。尝试设置 属性 的值:
Type control = mainWindow.GetType();
PropertyInfo l_propInfo = control.GetProperty("PropElementHighlighter", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
var propertyValue = l_propInfo.GetValue(mainWindow);
MethodInfo l_HighlightMethodInfo = l_propInfo.PropertyType.GetMethod("MyMethod");
l_HighlightMethodInfo.Invoke(propertyValue, new object[] { "Parameter1" });
如何在下面的代码中使用反射调用 "MyMethod"。
我有一个现有的 C# 代码,它具有我不允许更改的预定义结构。我需要使用反射调用 class 中存在的方法。
在下面的代码中,“_instance”包含 "Foo" 的对象。我需要在 Consumer class.
中使用 "PropElementHighlighter" 属性 调用 "MyMethod"使用 System.Reflection;
public class Foo
{
public void MyMethod(string Argument)
{
//some code
}
}
public class MainWindow
{
private Foo _instance;
public Foo PropElementHighlighter { get { return _instance; } }
}
public class Consumer
{
Type control = MainWindow.GetType();
PropertyInfo l_propInfo = control.GetProperty("PropElementHighlighter", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
MethodInfo l_HighlightMethodInfo = l_propInfo.PropertyType.GetMethod("MyMethod");
l_HighlightMethodInfo.Invoke(l_propInfo, new object[]{"Parameter1"});
}
调用方法时出现错误 "Object does not match target type."。
您收到错误消息是因为您在方法的对象中设置了 属性 信息。尝试设置 属性 的值:
Type control = mainWindow.GetType();
PropertyInfo l_propInfo = control.GetProperty("PropElementHighlighter", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
var propertyValue = l_propInfo.GetValue(mainWindow);
MethodInfo l_HighlightMethodInfo = l_propInfo.PropertyType.GetMethod("MyMethod");
l_HighlightMethodInfo.Invoke(propertyValue, new object[] { "Parameter1" });