我遵循Head First Design Patterns书中的所有示例,我站在第二章:观察者模式。该章第一部分中包含的基本(脏示例(手工制作))很容易用 C# 实现(来自 Java 代码示例)。一探究竟:
它工作正常。现在我的问题是关于C#中的 Java 中是否存在Observable类和Observer接口的内置等效项。看这张图片(取自 Head First Design Patterns)
我尝试了各种教程、指南和其他资源来实现该实现。
问候,约翰·奥尔蒂斯
我遵循Head First Design Patterns书中的所有示例,我站在第二章:观察者模式。该章第一部分中包含的基本(脏示例(手工制作))很容易用 C# 实现(来自 Java 代码示例)。一探究竟:
它工作正常。现在我的问题是关于C#中的 Java 中是否存在Observable类和Observer接口的内置等效项。看这张图片(取自 Head First Design Patterns)
我尝试了各种教程、指南和其他资源来实现该实现。
问候,约翰·奥尔蒂斯
观察者模式就是……一种模式。您可以在 C# 中使用类和接口来实现该模式,就像在 Java 中一样
http://www.fatagnus.com/the-observer-pattern-in-csharp/
要回答您的问题,不,C# 中没有与 Java 关键字等效的保留关键字。也就是说,您可以对类/接口/事件执行完全相同的操作。这是 Jon Skeet 在 Stack Overflow 上的一个很好的例子。
using System;
class Observable
{
public event EventHandler SomethingHappened;
public void DoSomething()
{
EventHandler handler = SomethingHappened;
if (handler != null)
{
handler(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();
}
}
是的,从 .NET Framework 4 开始,Java 中有 Observable 类和 Observer 接口的内置等效项。然而,它们都是 IObserver、IObservable 接口并且它们是通用的——这使得它们非常强大。详细说明如何使用它们有https://msdn.microsoft.com/library/ee850490(v=vs.110).aspx。
当然,您仍然可以编写自己的接口,或者使用事件/委托方法,而不是实现这些接口。