通过字符串找到方法并执行

通过字符串找到方法并执行

简单实现

using System;
using System.Reflection;

public class MagicClass
{
    private int magicBaseValue;

    public MagicClass()
    {
        magicBaseValue = 9;
    }
    public void GetName()
    {
        Console.WriteLine("xiaobaichong");
    }

    public int ItsMagic(int preMagic)
    {
        Console.WriteLine("HelloWorld");
        return preMagic * magicBaseValue;
    }
    public static void SayHello(string msg)
    {
        Console.WriteLine(msg);
    }
}

public class TestMethodInfo
{
    public static void Main()
    {
        // 获取构造函数并创建MagicClass的实例
        Type magicType = Type.GetType("MagicClass");
        ConstructorInfo magicConstructor = magicType.GetConstructor(Type.EmptyTypes);
        MagicClass magicClassObject = (MagicClass)magicConstructor.Invoke(new object[] { });

        //直接调用
        magicClassObject.ItsMagic(20);   // "HelloWorld"

        // 不带参数普通方法
        MethodInfo magicMethod00 = magicType.GetMethod("GetName");
        magicMethod00.Invoke(magicClassObject,null);    // xiaobaichong

        //通过反射调用 带参数
        // 获取 ItsMagic 方法并使用参数值100进行调用
        MethodInfo magicMethod01 = magicType.GetMethod("ItsMagic");
        object magicValue = magicMethod01.Invoke(magicClassObject, new object[] { 100 }); // HelloWorld

        //静态方法
        magicType.GetMethod("SayHello").Invoke(null, new object[] { "Good Morning" });  // Good Morning
    }
}

API说明

public object? Invoke (object? obj, object?[]? parameters);
参数:
obj:Object
在其上调用方法或构造函数的对象。 如果方法是静态的,则忽略此参数。 如果构造函数是静态的,则此参数必须是 null 或定义构造函数的类的实例。
parameters:Object[]
调用方法或构造函数的参数列表。 此对象数组在数量、顺序和类型方面与要调用的方法或构造函数的参数相同。 如果不存在任何参数,则 parameters 应为 null。

如果由此实例表示的方法或构造函数采用了 ref 参数(在 Visual Basic 中为 ByRef),那么此参数不需要特殊属性来通过此函数调用此方法或构造函数。 此数组中未使用值显式初始化的任何对象都将包含该对象类型的默认值。 对于引用类型元素,此值为 null。 对于值类型元素,此值为 0、0.0 或 false,具体取决于特定的元素类型。

返回:Object
一个包含已调用方法的返回值或包含已调用构造函数的 null 的对象。
posted @ 2021-10-06 22:52  镜子-眼泪  阅读(76)  评论(0)    收藏  举报