📅  最后修改于: 2023-12-03 14:39:45.824000             🧑  作者: Mango
在 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 方法创建一个委托实例。这个委托可以被调用来执行该方法。