国外哪些网站做产品推广比较好,旅游攻略网站开发背景,怎样登录柳州建设网站,付网站建设费用会计分录在C#中#xff0c;委托#xff08;delegate#xff09;和事件#xff08;event#xff09;经常一起使用#xff0c;但它们之间确实有一些基本的区别#xff1a; 委托#xff08;Delegate#xff09;#xff1a;委托是一个引用类型#xff0c;它可以引用一个或多个具…在C#中委托delegate和事件event经常一起使用但它们之间确实有一些基本的区别 委托Delegate委托是一个引用类型它可以引用一个或多个具有特定签名的方法。简单地说你可以将其视为一个类型安全的函数指针。 事件Event事件基于委托来实现但它添加了一层封装使得对象的其他部分不能直接调用或修改事件除非是那些声明了这个事件的类。事件通常用于在类之间通信一个类可以发布一个事件而其他类可以订阅这个事件。
示例代码
委托:
// 定义一个委托
public delegate void MyDelegate(string message);public class MyClass
{// 使用委托public MyDelegate MyAction;public void TriggerAction(){MyAction?.Invoke(Triggered action!);}
}public class Program
{public static void Main(){MyClass obj new MyClass();obj.MyAction DisplayMessage;obj.TriggerAction();}static void DisplayMessage(string message){Console.WriteLine(message);}
}事件:
public delegate void MyEventHandler(string message);public class EventPublisher
{// 使用事件public event MyEventHandler MyEvent;public void RaiseEvent(){MyEvent?.Invoke(Event raised!);}
}public class Program
{public static void Main(){EventPublisher publisher new EventPublisher();publisher.MyEvent OnMyEventOccurred; // 订阅事件publisher.RaiseEvent();}static void OnMyEventOccurred(string message){Console.WriteLine(message);}
}注意
在委托的例子中我们可以直接访问和修改MyAction委托。在事件的例子中我们不能直接访问或修改MyEvent事件例如不能直接调用或设置为null但我们可以使用订阅事件和使用-取消订阅事件。
这样事件提供了更好的封装和控制使外部代码不能直接调用或修改事件除非是那些声明了这个事件的类。