猿问

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

我该如何在下面的代码中使用反射来调用“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"});

    }

我收到错误“对象与目标类型不匹配”。调用方法时。


小唯快跑啊
浏览 92回答 1
1回答

素胚勾勒不出你

您收到错误是因为您正在方法的对象中设置属性信息。尝试设置属性值: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" });
随时随地看视频慕课网APP
我要回答