public Action
:public Action
声明了一个公共的委托字段或属性。它允许外部代码直接访问和修改该委托的引用。
外部代码可以直接调用该委托,或者替换该委托的引用。
这种方式缺乏对委托的访问控制,可能导致意外的修改或调用。
public event Action
:public event Action
声明了一个公共的事件。事件提供了一种安全的机制来管理委托的订阅和取消订阅。
外部代码只能通过
+=
和-=
操作符来订阅和取消订阅事件,不能直接调用或替换事件的引用。这种方式提供了更好的封装性和访问控制,防止了意外的修改或调用。
使用 event
关键字的主要好处如下:
封装性: 事件提供了一种封装机制,隐藏了委托的实现细节。外部代码只能通过事件的公共接口(即
+=
和-=
操作符)与事件进行交互,无法直接访问或修改事件的内部表示。访问控制: 事件允许你控制委托的订阅和取消订阅。外部代码无法直接调用事件,必须通过事件的添加和移除方法来订阅和取消订阅。这样可以防止意外的调用和修改,提高了代码的安全性。
语义清晰: 使用
event
关键字声明事件可以提高代码的可读性和语义清晰性。它明确表示了该成员是一个事件,而不是普通的委托字段或属性。这样可以更好地表达代码的意图,使其更易于理解和维护。事件的扩展性: 事件提供了一种松散耦合的通信机制。发布者和订阅者可以独立地演化,而不会相互影响。发布者可以在不影响现有订阅者的情况下添加或修改事件,而订阅者也可以灵活地订阅和取消订阅事件。
下面是一个简单的示例,展示了事件的用法:
public class Button
{
public event Action Clicked;
public void Click()
{
Clicked?.Invoke();
}
}
public class Program
{
static void Main()
{
Button button = new Button();
button.Clicked += HandleButtonClick;
button.Click();
}
static void HandleButtonClick()
{
Console.WriteLine("Button clicked!");
}
}
在这个例子中,Button
类定义了一个名为 Clicked
的公共事件。外部代码可以通过 +=
操作符订阅该事件,并在按钮被点击时收到通知。这展示了事件的封装性和松散耦合的特性。
总之,使用 event
关键字声明事件可以提供更好的封装性、访问控制、语义清晰性和扩展性。它是一种更安全和规范的方式来管理委托的订阅和取消订阅,并实现组件之间的通信。