考虑以下示例。

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关键字以哪种方式使股票更强大?

最佳答案

我的问题是event关键字以哪种方式使股票更强大?


这完全取决于班级外部客户可以做什么。如果这只是一个公共场所,那么任何人都可以:


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


相反,通过使用事件,其他代码只能订阅该事件或取消订阅该事件。我不会使用“健壮”一词来描述这种差异-这是封装问题,它表示其他代码应能够对Stock的实例进行处理。

有关更多信息,请参见我的article on delegates and events

07-28 02:55
查看更多