定义委托
// 定义一个委托类型
public delegate void MyDelegate(string message);
class Program
{
static void Main()
{
// 创建委托实例并关联方法
MyDelegate myDelegate = new MyDelegate(PrintMessage);
// 调用委托,实际上调用了关联的方法
myDelegate("Hello, delegates!");
}
static void PrintMessage(string message)
{
Console.WriteLine(message);
}
}
在上述例子中,MyDelegate 是一个委托类型,它可以引用一个参数为 string 类型且返回类型为 void 的方法。PrintMessage 方法与这个委托类型相匹配,所以我们可以将它关联到委托实例上,并通过调用委托来调用方法。
委托的多播
public delegate void MyDelegate(string message);
class Program
{
static void Main()
{
MyDelegate myDelegate1 = new MyDelegate(PrintMessage1);
MyDelegate myDelegate2 = new MyDelegate(PrintMessage2);
// 委托的多播
MyDelegate multiDelegate = myDelegate1 + myDelegate2;
// 调用多播委托,实际上调用了关联的所有方法
multiDelegate("Hello, delegates!");
}
static void PrintMessage1(string message)
{
Console.WriteLine("Message from PrintMessage1: " + message);
}
static void PrintMessage2(string message)
{
Console.WriteLine("Message from PrintMessage2: " + message);
}
}
委托支持多播,即一个委托可以引用多个方法。在这个例子中,multiDelegate 引用了两个不同的方法,调用 multiDelegate 时会依次调用关联的所有方法。
使用内置委托
C# 提供了一些内置的委托类型,例如 Action 和 Func:
class Program
{
static void Main()
{
// 使用 Action 委托
Action<string> actionDelegate = PrintMessage;
actionDelegate("Hello, Action!");
// 使用 Func 委托
Func<int, int, int> addDelegate = Add;
int result = addDelegate(3, 5);
Console.WriteLine("Result from Func: " + result);
}
static void PrintMessage(string message)
{
Console.WriteLine(message);
}
static int Add(int a, int b)
{
return a + b;
}
}
Action 委托用于表示没有返回值的方法,而 Func 委托用于表示有返回值的方法。在上述例子中,actionDelegate 引用了一个没有返回值的方法,而 addDelegate 引用了一个有返回值的方法。
委托是 C# 中实现委托和事件模型的基础。它们提供了一种灵活的方式来实现回调、多播以及其他事件驱动的编程模式。
转载请注明出处:http://www.pingtaimeng.com/article/detail/6365/C#