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 堅牢性は低くなりますが、

私の質問は、イベント キーワードがどのように株をより堅固にするのかということです。

4

1 に答える 1

4

私の質問は、イベント キーワードがどのように株をより堅固にするのかということです。

それはすべて、クラス外のクライアントができることの問題です。これが単なるパブリック フィールドである場合、誰でも次のことができます。

  • 既存のすべてのハンドラー自体を呼び出す
  • 既存のすべてのハンドラーを削除/置換します

代わりに、イベントを使用することで、他のコードはイベントへのサブスクライブまたはイベントからのサブスクライブ解除のみを行うことができます。この違いを説明するのに「堅牢」という言葉は使いません。これはカプセル化の問題であり、他のコードがStock.

詳細については、デリゲートとイベントに関する私の記事を参照してください。

于 2013-09-26T06:46:59.243 に答える