C#中的delegateeventEventHandlerActionFunc怎么使用
更新时间:2023-10-04delegate
在C#中,delegate 是一种类型,用于封装具有相同参数列表和返回类型的方法。它提供了一种方式,可以在运行时动态地将方法作为参数传递或者存储到变量中。delegate 的声明与方法声明相似,只是使用了 delegate 关键字,并指定了方法的参数类型和返回类型。然后,可以通过实例化 delegate 类型的变量,将具体的方法赋值给这个变量,并通过调用 delegate 变量来调用被赋值的方法。
下面是一个使用 delegate 的示例:
using System; delegate void MyDelegate(int num); class Program { static void Main(string[] args) { MyDelegate myDelegate = new MyDelegate(PrintNumber); myDelegate(10); } static void PrintNumber(int num) { Console.WriteLine("Number: " + num); } }
event
在C#中,event 是一种特殊的 delegate,用于定义和触发事件。它是一种订阅/发布模式的实现方式,允许一个对象发布事件,而其他对象可以订阅并在事件发生时执行相应的处理逻辑。事件通常用于实现类之间的协作,尤其在GUI应用程序中非常常见。
为了定义和使用事件,需要声明一个 event 类型的字段,然后使用特殊的事件附加器语法来向事件添加和移除处理方法。事件的触发通常通过使用 protected virtual 关键字在类中定义一个触发方法来实现。
下面是一个使用 event 的示例:
using System; delegate void MyEventHandler(); class EventPublisher { public event MyEventHandler MyEvent; public void OnMyEvent() { if (MyEvent != null) { MyEvent(); } } } class EventSubscriber { static void Main(string[] args) { EventPublisher publisher = new EventPublisher(); publisher.MyEvent += HandleMyEvent; publisher.OnMyEvent(); } static void HandleMyEvent() { Console.WriteLine("Event handled!"); } }
EventHandler
EventHandler 是一种预定义的 delegate 类型,它是一个通用的、带有两个参数(发送者和事件参数)并且没有返回值的委托类型。它通常用来封装事件的处理方法。
EventHandler 定义的委托类型具有以下函数签名:
public delegate void EventHandler(object sender, EventArgs e);
其中,sender 参数表示事件的发送者,通常是触发事件的对象。EventArgs 则是预定义的无参数的事件参数类型,如果需要传递自定义的事件参数,可以创建一个继承自 EventArgs 的类。
下面是一个使用 EventHandler 的示例:
using System; class EventPublisher { public event EventHandler MyEvent; public void OnMyEvent() { if (MyEvent != null) { MyEvent(this, EventArgs.Empty); } } } class EventSubscriber { static void Main(string[] args) { EventPublisher publisher = new EventPublisher(); publisher.MyEvent += HandleMyEvent; publisher.OnMyEvent(); } static void HandleMyEvent(object sender, EventArgs e) { Console.WriteLine("Event handled by " + sender); } }
Action/Func
Action 和 Func 是两个泛型 delegate 类型,Action 类型表示一个无返回值的方法,可以有零到多个参数。而 Func 类型则表示一个有返回值的方法,最后一个泛型参数表示返回值类型,其他参数表示方法的参数类型。
Action 和 Func 是预定义的泛型 delegate 类型,可以根据需要指定不同的参数类型和返回类型,非常灵活。它们通常用于将方法作为参数传递给其他方法,或者用于定义和处理回调。
下面是一个使用 Action 和 Func 的示例:
using System; class Program { static void Main(string[] args) { ActionprintNumber = number => Console.WriteLine("Number: " + number); printNumber(10); Func addNumbers = (a, b) => a + b; int sum = addNumbers(2, 3); Console.WriteLine("Sum: " + sum); } }
总结
delegate 是一种类型,用于封装具有相同参数列表和返回类型的方法,可以动态地传递和存储方法。
event 是一种特殊的 delegate,用于定义和触发事件,通常用于实现类之间的协作。
EventHandler 是一种预定义的 delegate 类型,用于封装事件的处理方法。
Action 和 Func 是两个泛型 delegate 类型,用于表示无返回值和有返回值的方法,可以根据需要指定参数类型和返回类型。
这些功能在C#中提供了灵活和强大的机制,使得可以更好地编写可扩展和可维护的代码。