Observable和Observer (java. net)util包)在c#中的等价

本文关键字:util Observer java net Observable | 更新日期: 2023-09-27 18:03:32

我遵循Head First Design Patterns书中的所有例子,我站在第二章:Observer Pattern。该章第一节中包含的基本示例(手工制作的脏示例)很容易在c#中实现(来自Java代码示例)。查看一下:

  • Subject.cs
  • Observer.ss
  • WeatherData.cs
  • DisplayElement.cs
  • CurrentConditionsDisplay.cs
  • ForecastDisplay.cs
  • HeatIndexDisplay.cs
  • StatisticsDisplay.cs

工作正常。现在我的问题是,在 c# 中是否有内置的int等效于Observable类和Java中的Observer接口。请看这张图片(取自Head First Design Patterns)

我尝试了各种教程、指南和其他资源来实现它。

问候,约翰·奥尔蒂斯

Observable和Observer (java. net)util包)在c#中的等价

观察者模式就是…一个模式。您可以在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();
    }
}

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

http://yoda.arachsys.com/csharp/events.html

是的,从。net Framework 4开始,Java中有内置的int类和观察者接口。然而,它们都是IObserver和IObservable的接口,而且它们都是通用的——这使得它们非常强大。如何使用它们的详细信息请访问https://msdn.microsoft.com/library/ee850490(v=vs.110).aspx。

当然,除了实现这些接口,你还可以自己编写,或者使用事件/委托方法。