做ps兼职的网站,wordpress 手动上传主题,玛迪网站建设,做全屏网站设计时容易犯的错在C#中#xff0c;委托#xff08;Delegates#xff09;和事件#xff08;Events#xff09;是用于实现事件驱动编程的关键组件。
委托#xff08;Delegates#xff09;
委托是一种特殊的类型#xff0c;它定义了方法的签名#xff08;即方法的返回类型和参数类型委托Delegates和事件Events是用于实现事件驱动编程的关键组件。
委托Delegates
委托是一种特殊的类型它定义了方法的签名即方法的返回类型和参数类型并可以持有对具有相同签名的方法的引用。通过委托你可以将方法当作参数传递、存储在变量中或者作为其他方法的返回值。这使得编程更加灵活尤其是在设计回调方法或者异步处理时。
委托的声明和使用
// 声明一个委托它可以引用任何返回void且接受两个int参数的方法。
public delegate void MyDelegate(int a, int b);public class Program
{// 一个符合委托签名的方法public static void Add(int x, int y){Console.WriteLine(${x} {y} {x y});}// 另一个符合委托签名的方法public static void Subtract(int x, int y){Console.WriteLine(${x} - {y} {x - y});}public static void Main(){// 创建委托实例并关联到Add方法MyDelegate del new MyDelegate(Add);// 通过委托调用方法del(10, 20); // 输出: 10 20 30// 将委托关联到Subtract方法del Subtract;// 再次通过委托调用方法del(10, 5); // 输出: 10 - 5 5}
}事件Events
事件是一种使类或对象可以通知其他类或对象发生了某些事情的机制。在定义事件的类中它通常是基于某个委托类型的字段不过它使用了特殊的事件语法和两个附加的访问器 add 和 remove 来管理委托的订阅者列表。
事件的声明和使用
// 声明一个委托
public delegate void MyEventHandler(string message);public class Publisher
{// 声明一个事件基于上面的委托public event MyEventHandler SomethingHappened;// 触发事件的方法public void DoSomething(string message){// 触发事件SomethingHappened?.Invoke(message);}
}public class Subscriber
{// 事件处理器public void OnSomethingHappened(string message){Console.WriteLine($Received message: {message});}
}public class Program
{public static void Main(){Publisher publisher new Publisher();Subscriber subscriber new Subscriber();// 订阅事件publisher.SomethingHappened subscriber.OnSomethingHappened;// 触发事件publisher.DoSomething(Hello, World!); // 输出: Received message: Hello, World!// 取消订阅事件publisher.SomethingHappened - subscriber.OnSomethingHappened;// 再次触发事件由于没有订阅者所以没有输出publisher.DoSomething(Hello again!);}
}在上面的例子中Publisher 类有一个名为 SomethingHappened 的事件和一个触发该事件的方法 DoSomething。Subscriber 类有一个方法 OnSomethingHappened它将被用作事件的处理器。在 Main 方法中创建了 Publisher 和 Subscriber 的实例并将 subscriber.OnSomethingHappened 方法订阅到 publisher.SomethingHappened 事件。当 DoSomething 被调用时它将触发事件从而导致 OnSomethingHappened 方法被调用。如果取消订阅那么 DoSomething 的调用将不会有任何效果因为没有事件处理器与之关联。