📜  C# 在运行时创建委托类型 - C# (1)

📅  最后修改于: 2023-12-03 14:39:45.824000             🧑  作者: Mango

C# 在运行时创建委托类型

在 C# 中,委托是一种引用方法的类型,可以用于将方法作为参数传递或将它们存储在变量中,以后使用。在本文中,我们将学习如何在运行时创建委托类型。

委托类型的定义

委托类型定义可以使用委托关键字。下面是一个简单的例子:

delegate int MyDelegateType(int a, int b);

该语句定义了一个名为 MyDelegateType 的委托类型,它接受两个 int 类型的参数并返回一个 int 类型的结果。现在我们可以声明一个变量来存储该类型的委托实例:

MyDelegateType myDelegate = MyMethod;

其中 MyMethod 是一个我们想要引用的具有相似签名的方法。

在运行时创建委托类型

要在运行时创建委托类型,我们需要使用 System.Reflection 命名空间中的 Delegate 类。下面是一个例子:

using System.Reflection;

class Program
{
    static void Main(string[] args)
    {
        MethodInfo methodInfo = typeof(Program).GetMethod("MyMethod");
        MyDelegateType myDelegate = (MyDelegateType)Delegate.CreateDelegate(typeof(MyDelegateType), methodInfo);
        int result = myDelegate(2, 3);
        Console.WriteLine("Result is " + result);
    }

    static int MyMethod(int a, int b)
    {
        return a + b;
    }
}

在上面的示例中,我们使用反射获取 MyMethod 方法的 MethodInfo 对象。然后,我们使用 Delegate.CreateDelegate 方法创建了一个委托类型,该类型与 MyDelegateType 相同,并将其执行方法设置为 MyMethod。最后,我们调用 myDelegate 实例,并传递两个 int 类型的参数来执行该方法。

结论

在 C# 中,我们可以在运行时创建委托类型。要实现此功能,我们需要使用 System.Reflection 命名空间中的 Delegate 类和 MethodInfo 类。首先,我们使用反射获得一个方法的 MethodInfo 对象,然后使用 Delegate.CreateDelegate 方法创建一个委托实例。这个委托可以被调用来执行该方法。