2

考虑以下示例。

每次股票价格发生变化时,该类都会Stock触发其事件:PriceChanged

public delegate void PriceChangedHandler (decimal oldPrice,decimal newPrice);
public class Stock
{
    string symbol;
    decimal price;
    public Stock (string symbol) { this.symbol = symbol; }
    public event PriceChangedHandler PriceChanged;
    public decimal Price
    {
        get { return price; }
        set
        {
            if (price == value) return; // Exit if nothing has changed
            if (PriceChanged != null) // If invocation list not empty,
            PriceChanged (price, value); // fire event.
            price = value;
        }
    }
}

如果我们从示例中删除 event 关键字,使其PriceChanged成为普通的委托字段,我们的示例将给出相同的结果。但是,Stock 会不太健壮,

我的问题是 event 关键字以何种方式使股票更加稳健?

4

1 回答 1

4

我的问题是 event 关键字以何种方式使股票更加稳健?

这完全取决于课堂之外的客户可以做什么。如果这只是一个公共领域,那么任何人都可以:

  • 自己调用所有现有的处理程序
  • 删除/替换所有现有的处理程序

相反,通过使用事件,其他代码只能订阅该事件或取消订阅它。我不会使用“健壮”这个词来描述这种差异——这是一个封装问题,并表达了其他代码应该能够对Stock.

有关更多信息,请参阅我关于代表和事件的文章。

于 2013-09-26T06:46:59.243 回答