Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中的Observable和Observer(java.util包)等价物#_C#_Java_Design Patterns_Observer Pattern - Fatal编程技术网

C# C语言中的Observable和Observer(java.util包)等价物#

C# C语言中的Observable和Observer(java.util包)等价物#,c#,java,design-patterns,observer-pattern,C#,Java,Design Patterns,Observer Pattern,我遵循了《头优先设计模式》一书中的所有示例,我站在第二章:观察者模式上。该章第一节中包含的基本(脏示例(手工制作))很容易在C#中实现(来自Java代码示例)。请查看: 它工作正常。现在我的问题是,在C#中,是否有Java中的observatable类和observator接口的内置int等价物。请参见(摘自首件优先设计模式) 我尝试了各种教程、指南和其他资源来实现该功能 问候,, 约翰·奥尔蒂斯观察者模式就是……一种模式。您可以用C#中的类和接口实现该模式,就像在Java中

我遵循了《头优先设计模式》一书中的所有示例,我站在第二章:观察者模式上。该章第一节中包含的基本(脏示例(手工制作))很容易在C#中实现(来自Java代码示例)。请查看:

它工作正常。现在我的问题是,在C#中,是否有Java中的observatable类和observator接口的内置int等价物。请参见(摘自首件优先设计模式)

我尝试了各种教程、指南和其他资源来实现该功能

问候,,
约翰·奥尔蒂斯

观察者模式就是……一种模式。您可以用C#中的类和接口实现该模式,就像在Java中一样

要回答您的问题,不,C#中没有与Java关键字等价的保留关键字。也就是说,您可以对类/接口/事件执行完全相同的操作。这里是Jon Skeet关于堆栈溢出的一个很好的例子

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类和Observator接口都有内置的int等价物。然而,它们都是IObserver接口、IObservable接口和通用接口,这使得它们非常强大。有关如何使用它们的详细信息,请参阅


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

看起来最接近的“内置”接口应该是标准事件。。。只是事件不使用“类”的开销。如果我正确地得到该模式,事件提供者将是“可观察的”,而接收者将是“观察者”。他们共享的合同实质上是“事件协议”。此外,事件可以是接口声明的一部分。我确信一些Java迁移的开发人员已经实现了一个库来“用Java的方式”实现它,但是开箱即用?我不知道。事实上,C#“事件”和“代表”非常丰富。对于大多数“真实世界”场景,我肯定会首先关注事件。请阅读以下链接:。我不是在搜索关键字,我在寻找的是C#中的类/接口(可观察/观察者)等价物。谢谢。@JohnOrtiz John,这些链接为您提供了几个例子,我特别建议您看看Jon Skeet的答案。为了您的利益,我已经用它更新了我的答案。