ToB企服应用市场:ToB评测及商务社交产业平台

标题: 详解C#委托与变乱 [打印本页]

作者: 饭宝    时间: 2024-7-11 11:52
标题: 详解C#委托与变乱

在C#中,委托是一种引用类型的数据类型,答应我们封装方法的引用。通过利用委托,我们可以将方法作为参数传递给其他方法,或者将多个方法组合在一起,从而实现更机动的编程模式。委托类似于函数指针,但提供了类型安全和垃圾接纳等现代语言特性。
基本概念

界说委托

界说委托必要指定它所代表的方法的原型,包罗返回类型和参数列表。例如:
  1. public delegate int MyDelegate(int a, int b);
复制代码
这界说了一个名为MyDelegate的委托,它代表一个接受两个整数参数并返回一个整数的方法。
创建委托实例

创建委托实例时,可以利用new关键字加上委托类型和要封装的方法名:
  1. MyDelegate myDelegate = new MyDelegate(AddNumbers);
复制代码
此中AddNumbers是一个符合MyDelegate界说的方法。
调用委托

一旦有了委托实例,就可以像调用方法一样调用它:
  1. int result = myDelegate(5, 3);
复制代码
多播委托

委托可以被计划为“多播”的,这意味着它们可以调用多个方法。当调用多播委托时,所有注册的方法都会按次序执行:
  1. MyDelegate del1 = new MyDelegate(AddNumbers);
  2. MyDelegate del2 = new MyDelegate(MultiplyNumbers);
  3. MyDelegate combinedDel = del1 + del2;
  4. combinedDel(5, 3); // 先调用 AddNumbers, 然后调用 MultiplyNumbers
复制代码
匿名方法和Lambda表达式

从C# 2.0开始,可以利用匿名方法来界说委托:
  1. MyDelegate anonMethod = delegate(int x, int y) { return x + y; };
复制代码
而在C# 3.0之后,Lambda表达式成为更简洁的选择:
  1. MyDelegate lambdaExpr = (int x, int y) => x + y;
复制代码
变乱

在C#中,变乱是一种特别的委托类型,用于封装消息的发送机制,通常用于组件之间或对象之间的通信。变乱是.NET框架中处置惩罚异步操纵、UI交互和信号通知的核心机制。下面详细先容变乱的概念、界说和利用。
变乱的基本概念

变乱答应一个类(变乱发布者)向另一个或多个类(变乱订阅者)广播信息,而无需直接调用接收方的任何方法。这实现了发布者和订阅者之间的解耦,使得代码更加模块化和可维护。
界说变乱

变乱基于委托类型界说,通常利用System.EventHandler或自界说的委托类型。界说变乱时,通常在类中声明一个委托类型的私有字段,并在此基础上声明一个公共的变乱属性。例如:
  1. public class Publisher
  2. {
  3.     // 自定义委托类型
  4.     public delegate void MyEventHandler(object source, MyEventArgs args);
  5.     // 定义事件
  6.     private event MyEventHandler myEvent;
  7.     // 使用事件属性暴露事件
  8.     public event MyEventHandler MyEvent
  9.     {
  10.         add { myEvent += value; }
  11.         remove { myEvent -= value; }
  12.     }
  13.     // 触发事件
  14.     public void RaiseEvent()
  15.     {
  16.         if (myEvent != null)
  17.         {
  18.             myEvent(this, new MyEventArgs());
  19.         }
  20.     }
  21. }
复制代码
在这个例子中,Publisher类有一个名为MyEvent的变乱,它基于MyEventHandler委托类型。变乱触发时,RaiseEvent方法会被调用,它会检查是否有订阅者,并调用所有订阅者的相应方法。
订阅和取消订阅变乱

变乱可以通过变乱处置惩罚程序来订阅。变乱处置惩罚程序是一个与变乱委托类型匹配的方法。订阅变乱时,将变乱处置惩罚程序添加到变乱中;取消订阅则移除该处置惩罚程序。
  1. class Subscriber
  2. {
  3.     public void OnMyEvent(object sender, MyEventArgs e)
  4.     {
  5.         Console.WriteLine("Event triggered.");
  6.     }
  7. }
  8. // 在某个地方订阅事件
  9. Publisher publisher = new Publisher();
  10. Subscriber subscriber = new Subscriber();
  11. publisher.MyEvent += subscriber.OnMyEvent;
  12. // 取消订阅事件
  13. publisher.MyEvent -= subscriber.OnMyEvent;
复制代码
利用变乱参数

变乱经常与变乱参数一起利用,这些参数通常封装了变乱发生时的附加信息。变乱参数是通过继承EventArgs类来创建的。例如:
  1. public class MyEventArgs : EventArgs
  2. {
  3.     public string Message { get; set; }
  4. }
复制代码
在触发变乱时,可以创建变乱参数的实例并传递给变乱:
  1. public void RaiseEvent()
  2. {
  3.     if (myEvent != null)
  4.     {
  5.         myEvent(this, new MyEventArgs { Message = "Hello, world!" });
  6.     }
  7. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4