OneBigLoser
OneBigLoser
发布于 2024-06-21 / 13 阅读
0
0

public event Action 和 public Action 在 C# 中有不同的用途和行为

  1. public Action:

    • public Action 声明了一个公共的委托字段或属性。

    • 它允许外部代码直接访问和修改该委托的引用。

    • 外部代码可以直接调用该委托,或者替换该委托的引用。

    • 这种方式缺乏对委托的访问控制,可能导致意外的修改或调用。

  2. public event Action:

    • public event Action 声明了一个公共的事件。

    • 事件提供了一种安全的机制来管理委托的订阅和取消订阅。

    • 外部代码只能通过 +=-= 操作符来订阅和取消订阅事件,不能直接调用或替换事件的引用。

    • 这种方式提供了更好的封装性和访问控制,防止了意外的修改或调用。

使用 event 关键字的主要好处如下:

  1. 封装性: 事件提供了一种封装机制,隐藏了委托的实现细节。外部代码只能通过事件的公共接口(即 +=-= 操作符)与事件进行交互,无法直接访问或修改事件的内部表示。

  2. 访问控制: 事件允许你控制委托的订阅和取消订阅。外部代码无法直接调用事件,必须通过事件的添加和移除方法来订阅和取消订阅。这样可以防止意外的调用和修改,提高了代码的安全性。

  3. 语义清晰: 使用 event 关键字声明事件可以提高代码的可读性和语义清晰性。它明确表示了该成员是一个事件,而不是普通的委托字段或属性。这样可以更好地表达代码的意图,使其更易于理解和维护。

  4. 事件的扩展性: 事件提供了一种松散耦合的通信机制。发布者和订阅者可以独立地演化,而不会相互影响。发布者可以在不影响现有订阅者的情况下添加或修改事件,而订阅者也可以灵活地订阅和取消订阅事件。

下面是一个简单的示例,展示了事件的用法:

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 关键字声明事件可以提供更好的封装性、访问控制、语义清晰性和扩展性。它是一种更安全和规范的方式来管理委托的订阅和取消订阅,并实现组件之间的通信。


评论