一尘不染

C#观察者的超简单示例/可与委托人一起观察

c#

我最近开始研究C#,但是我一辈子都无法弄清楚在用语言实现观察者/可观察模式时委托的工作方式。

有人可以给我一个超简单的例子吗?我 已经用 谷歌搜索了,但是我发现的所有例子要么都是针对特定问题的,要么太“ blo肿”。


阅读 228

收藏
2020-05-19

共1个答案

一尘不染

观察者模式通常通过事件来实现。

这是一个例子:

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 空条件
运算符DoSomething安全地实现了处理SomethingHappened尚未订阅的情况,因此为null。如果您使用的是旧版本的C#,则需要这样的代码:

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