上一篇: C# 索引器(Indexer)
下一篇: C# 事件(Event)
C# 委托(Delegate)
在本教程中,我们将学习C#委托(Delegate)的基本概念及其应用。
- 委托简介
- 定义和使用委托
- 多播委托
- 泛型委托
- 事件和委托
委托简介
委托(Delegate)是C#中表示方法引用的类型。它们类似于C++中的函数指针或其他编程语言中的回调函数。委托可以用于将方法作为参数传递给其他方法,实现事件处理、异步操作等功能。
定义和使用委托
要定义委托,需要使用 delegate
关键字并指定方法签名。以下代码演示了如何定义一个委托类型 MyDelegate
,该类型表示一个接受整数参数并返回整数结果的方法。
public delegate int MyDelegate(int x);
现在可以创建一个匹配该签名的方法,并使用委托类型实例化一个委托对象。
public class MyClass { public int Double(int x) { return x * 2; } public void UseDelegate() { MyDelegate myDelegate = new MyDelegate(Double); int result = myDelegate(10); Console.WriteLine(result); // 输出 "20" } }
也可以使用匿名方法或Lambda表达式创建委托实例:
MyDelegate myDelegate = x => x * 2;
多播委托
多播委托是一种特殊类型的委托,它可以引用多个方法。当调用多播委托时,将依次执行所有关联的方法。
要创建多播委托,请使用 +=
运算符将多个方法引用添加到委托实例中。
public class MyClass { public void Method1() { Console.WriteLine("Method1 called."); } public void Method2() { Console.WriteLine("Method2 called."); } public void UseMulticastDelegate() { Action myDelegate = Method1; myDelegate += Method2; myDelegate(); // 输出 "Method1 called." 和 "Method2 called." } }
泛型委托
泛型委托允许在定义委托类型时使用类型参数。这增加了委托的灵活性,可以在不同类型之间共享通用功能。
C# 提供了几种预定义的泛型委托类型,如 Func
、Action
和 Predicate
。例如,以下代码演示了如何使用 Func
类型实例化一个委托以及使用 Action<int>
类型输出值。
public int MultiplyByThree(int x) { return x * 3; } public void DisplayValue(int value) { Console.WriteLine($"Value: {value}"); } public void UseGenericDelegate() { Func<int, int> myFunc = MultiplyByThree; Action<int> myAction = DisplayValue; int result = myFunc(10); myAction(result); // 输出 "Value: 30" }
事件和委托
委托常用于处理事件。定义事件时,需要声明一个委托类型,并使用 event
关键字创建一个事件实例。
以下代码演示了如何定义一个简单的事件模型:
// 定义自定义事件参数类 public class MyEventArgs : EventArgs { public string Message { get; set; } public MyEventArgs(string message) { Message = message; } } // 定义事件处理程序委托 public delegate void MyEventHandler(object sender, MyEventArgs e); public class MyClass { // 定义事件 public event MyEventHandler MyEvent; // 触发事件的方法 public void TriggerEvent() { if (MyEvent != null) { MyEventArgs args = new MyEventArgs("The event has been triggered."); MyEvent(this, args); } } } public class Program { public static void Main(string[] args) { MyClass myObject = new MyClass(); // 订阅事件 myObject.MyEvent += MyEventHandlerMethod; // 触发事件 myObject.TriggerEvent(); } // 事件处理程序方法 private static void MyEventHandlerMethod(object sender, MyEventArgs e) { Console.WriteLine(e.Message); // 输出 "The event has been triggered." }
本教程简要介绍了C#委托的基本概念及其应用。通过学习和实践,您将更好地理解并掌握C#委托的使用方法。委托是C#编程中的一种强大工具,可以帮助您创建灵活且可扩展的代码。