C# 带有委托的观察者可观察对象的超级简单示例

作者:编程家 分类: c++ 时间:2025-07-20

C# 带有委托的观察者/可观察对象的超级简单示例

观察者模式是一种常用的设计模式,用于实现对象之间的松耦合。在C#中,我们可以使用委托来实现观察者模式,其中委托充当观察者,而可观察对象则是被观察的目标。

在本文中,我们将通过一个超级简单的示例来演示如何使用C#中的委托来实现观察者/可观察对象模式。

可观察对象

首先,我们需要创建一个可观察对象。可观察对象是被观察的目标,当其状态发生变化时,会通知所有的观察者。在我们的示例中,我们创建了一个名为"ObservableObject"的类,其中包含一个名为"ValueChanged"的委托和一个名为"OnValueChanged"的方法。

csharp

public class ObservableObject

{

public delegate void ValueChangedEventHandler(string value);

public event ValueChangedEventHandler ValueChanged;

public void OnValueChanged(string value)

{

ValueChanged?.Invoke(value);

}

}

在上述代码中,"ValueChanged"委托用于定义观察者需要实现的方法签名。"OnValueChanged"方法用于触发值变化事件,并通过委托通知所有的观察者。

观察者

接下来,我们需要创建一个观察者类,该类实现了观察者需要实现的方法。在我们的示例中,我们创建了一个名为"Observer"的类,其中包含一个名为"HandleValueChanged"的方法。

csharp

public class Observer

{

public void HandleValueChanged(string value)

{

Console.WriteLine("Value changed: " + value);

}

}

在上述代码中,"HandleValueChanged"方法用于处理值变化事件。在本例中,我们简单地将值打印到控制台上。

使用观察者模式

现在,我们可以使用观察者模式将可观察对象和观察者关联起来。在我们的示例中,我们创建了一个可观察对象实例和两个观察者实例,并将观察者注册为可观察对象的观察者。

csharp

static void Main(string[] args)

{

ObservableObject observableObject = new ObservableObject();

Observer observer1 = new Observer();

Observer observer2 = new Observer();

observableObject.ValueChanged += observer1.HandleValueChanged;

observableObject.ValueChanged += observer2.HandleValueChanged;

observableObject.OnValueChanged("New value");

}

在上述代码中,我们首先创建了一个可观察对象实例"observableObject"和两个观察者实例"observer1"和"observer2"。接下来,我们通过使用"+="操作符将观察者的"HandleValueChanged"方法注册为可观察对象的"ValueChanged"事件的处理程序。

最后,我们调用可观察对象的"OnValueChanged"方法,将一个新的值作为参数传递。这将触发值变化事件,并通知所有的观察者。

当我们运行上述代码时,我们将在控制台上看到以下输出:

Value changed: New value

Value changed: New value

在本文中,我们演示了如何使用C#中的委托来实现观察者/可观察对象模式。通过创建一个可观察对象和观察者类,并使用委托来定义事件和处理程序,我们能够实现对象之间的松耦合。观察者模式在实际开发中经常用于事件处理、UI更新等场景,帮助我们编写更具可维护性和可扩展性的代码。