Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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# 为什么.NET ObservableCollection<;T>;作为类而不是接口实现?_C#_Design Patterns_Observablecollection - Fatal编程技术网

C# 为什么.NET ObservableCollection<;T>;作为类而不是接口实现?

C# 为什么.NET ObservableCollection<;T>;作为类而不是接口实现?,c#,design-patterns,observablecollection,C#,Design Patterns,Observablecollection,在阅读Observer设计模式时,我注意到它是使用接口实现的。在Java中,Java.util.observable实现也是一个类。C#和Java版本不应该使用接口吗 斯科特但他们确实使用接口。NET中的ObservableCollection是接口的一个实现—您可以随意忽略它,也可以自行实现。好吧,它实现了INotifyCollectionChanged和INotifyPropertyChanged。然而,有趣的是,它没有实现.NET4.0中的新接口,这可能是您所期望的 如果有一种通用形式的I

在阅读Observer设计模式时,我注意到它是使用接口实现的。在Java中,Java.util.observable实现也是一个类。C#和Java版本不应该使用接口吗


斯科特

但他们确实使用接口。NET中的ObservableCollection是接口的一个实现—您可以随意忽略它,也可以自行实现。

好吧,它实现了
INotifyCollectionChanged
INotifyPropertyChanged
。然而,有趣的是,它没有实现.NET4.0中的新接口,这可能是您所期望的


如果有一种通用形式的
INotifyCollectionChanged
,这可能会很有用。。。但我不知道有一个。

如何“实现为接口”?如果某个东西已经实现了,那么它就是一个类,不是吗?接口并不是独立实现的。然而,问题的含义是正确的。net集合对象图与ObservableCollection之间存在巨大差距。它的功能应该分为不同的接口,以便以更灵活的方式实现可扩展性。例如,如果我实现了ObservableDictionary:INotifyCollectionChanged,我就不能将其用作ReadOnlyObservableCollection的源。当前的实现不是基于模式的,也根本不支持基于模式的开发。因此,我实际上尝试过这种方法,如果直接这样做,结果会非常糟糕,因为任何同时实现IObservable和IEnumerable的类都会同时获得Rx和Linq扩展—大量的铸造和咬牙。但是,可以很容易地将AsObservable()实现为扩展方法