网站开发全栈工程师技能图,主网站怎么做熊掌号优化,网络查控系统设计方案,哪里长沙网站开发在C#中#xff0c;事件#xff08;Event#xff09;是一种特殊的成员#xff0c;它允许类或对象以类型安全的方式向外界发出通知#xff0c;表明某个特定的行为或状态变化已经发生。
订阅该事件的其他类可以定义处理方法来响应这些通知。
事件主要基于委托机制实现…在C#中事件Event是一种特殊的成员它允许类或对象以类型安全的方式向外界发出通知表明某个特定的行为或状态变化已经发生。
订阅该事件的其他类可以定义处理方法来响应这些通知。
事件主要基于委托机制实现是C#编程中实现观察者模式和发布-订阅模型的关键部分。
以下是如何在C#中声明、引发raise和订阅事件的基本步骤 声明事件
首先你需要定义一个委托类型这个委托类型对应事件处理方法的签名。然后使用event关键字声明事件。
public delegate void MyEventHandler(object sender, EventArgs e); // 声明一个委托类型public class PublisherClass
{public event MyEventHandler MyEvent; // 声明一个事件
} 订阅事件
在订阅者类中你可以通过.操作符来添加一个事件处理方法到事件的订阅列表中。
public class SubscriberClass
{private PublisherClass publisher;public SubscriberClass(PublisherClass p){publisher p;publisher.MyEvent OnMyEvent; // 订阅事件}private void OnMyEvent(object sender, EventArgs e){Console.WriteLine(Event has been raised by sender.ToString());// 这里执行事件处理逻辑}
} 触发事件
在发布者类内部当特定条件满足时可以通过调用事件的.Invoke()方法来触发事件。
public class PublisherClass
{// ...public void DoSomething(){// 当需要触发事件时OnMyEvent?.Invoke(this, EventArgs.Empty);}protected virtual void OnMyEvent(EventArgs e){MyEvent?.Invoke(this, e); // 安全地引发事件防止null引用异常}
} 移除事件订阅
通过.-操作符可以取消对事件的订阅。
public class SubscriberClass
{// ...~SubscriberClass() // 或在适当的时候解除订阅{publisher.MyEvent - OnMyEvent; // 取消订阅事件}
} 注意点
使用?.Invoke()是为了避免在没有订阅者的情况下尝试调用事件导致的NullReferenceException。OnMyEvent是一个保护的虚方法通常用于在类内部引发事件子类可以根据需要重写此方法。事件名称通常以On开头例如OnButtonClick遵循C#的命名规范。事件参数通常是EventArgs或其派生类包含与事件相关的信息。
事件只能使用操作符来订阅使用-操作符来取消订阅。这确保了事件的封装性即外部代码不能直接调用事件。事件内部通常使用受保护的虚拟方法如OnMyEvent来触发事件这样派生类可以重写事件触发逻辑。事件的类型通常是委托类型它定义了可以订阅事件的方法的签名。自定义的事件参数类如MyEventArgs通常继承自EventArgs类并包含与事件相关的数据。