为了账号安全,请及时绑定邮箱和手机立即绑定

使用反射通过属性调用方法

使用反射通过属性调用方法

C#
小唯快跑啊 2023-09-16 15:09:14
我该如何在下面的代码中使用反射来调用“MyMethod”。我有一个现有的 C# 代码,它具有预定义的结构,我不允许更改。我需要使用反射调用类中存在的方法。在下面的代码中,“_instance”包含“Foo”对象。我需要在 Consumer 类中使用“PropElementHighlighter”属性调用“MyMethod”。使用系统反射;    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"});    }我收到错误“对象与目标类型不匹配”。调用方法时。
查看完整描述

1 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

您收到错误是因为您正在方法的对象中设置属性信息。尝试设置属性值:


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" });


查看完整回答
反对 回复 2023-09-16
  • 1 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信