1. ホーム
  2. c#

[解決済み] C#のデリゲートによるオブザーバ/オブザーバブルの超簡単な例

2022-06-04 19:19:58

質問

私は最近C#を調べ始めたのですが、この言語でobserver/observableパターンを実装する際にデリゲートがどのように機能するのかがどうしても分かりません。

どなたか、それがどのように行われるかの超簡単な例を教えていただけませんか?I を持っています。 でググってみましたが、私が見つけた例はすべて、問題が特殊すぎるか、または "bloated" のどちらかでした。

どのように解決するのですか?

observerパターンは、通常 イベント .

以下はその例です。

using System;

class Observable
{
    public event EventHandler SomethingHappened;

    public void DoSomething() =>
        SomethingHappened?.Invoke(this, EventArgs.Empty);
}

class Observer
{
    public void HandleEvent(object sender, EventArgs args)
    {
        Console.WriteLine("Something happened to " + sender);
    }
}

class Test
{
    static void Main()
    {
        Observable observable = new Observable();
        Observer observer = new Observer();
        observable.SomethingHappened += observer.HandleEvent;

        observable.DoSomething();
    }
}

もっと詳しいことはリンク先の記事をご覧ください。

なお、上記の例では、C# 6 null-conditional(ヌル条件 演算子を用いて DoSomething を安全に実装し SomethingHappened が購読されておらず、したがって null である場合を安全に処理します。古いバージョンの C# を使用している場合は、次のようなコードが必要です。

public void DoSomething()
{
    var handler = SomethingHappened;
    if (handler != null)
    {
        handler(this, EventArgs.Empty);
    }
}