首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C# 自定义 Observable 集合 - 我应该使用组合还是继承?

在 C# 中,自定义 Observable 集合时,我们可以使用组合或继承来实现。下面是两种方法的优势和应用场景:

  1. 组合:

组合是指在自定义的 Observable 集合类中,使用现有的集合类(如 List<T>),并在其上添加 INotifyCollectionChanged 接口的实现。这种方法的优势在于:

  • 更简单,易于实现。
  • 不需要继承现有的集合类,因此不受其限制。
  • 可以在现有的集合类上添加其他接口,如 INotifyPropertyChanged 等。

应用场景:

  • 当需要为现有的集合类添加 Observable 功能时,可以使用组合。
  • 当需要创建一个新的 Observable 集合类,但不需要从现有的集合类继承其他功能时,可以使用组合。
  1. 继承:

继承是指从现有的集合类(如 ObservableCollection<T>)继承,并在其上添加 INotifyCollectionChanged 接口的实现。这种方法的优势在于:

  • 更简单,易于实现。
  • 可以直接继承现有的集合类,从而获得其所有功能。

应用场景:

  • 当需要为现有的集合类添加 Observable 功能时,并且需要从现有的集合类继承其他功能时,可以使用继承。

推荐的腾讯云相关产品:

  • 腾讯云云巢(Tencent Sphere):一款强大的云原生应用管理平台,支持多种编程语言和框架,可以帮助您快速构建、部署和管理应用。
  • 腾讯云容器服务(Tencent Kubernetes Engine,TKE):一种快速、简单、灵活的容器解决方案,支持 Kubernetes 集群的部署和管理。
  • 腾讯云 Serverless 云函数(Tencent Cloud Function,SCF):一种按需付费的无服务器计算服务,可以帮助您快速构建、部署和管理应用,而无需担心服务器和运维工作。

产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

走进 RxSwift 之观察者模式

事实证明还是图样!RxSwift 内部还是有各种类各种继承,当然也有各种同步机制:自旋锁、递归锁、原子操作……说好的 functional 呢?...这一开始让有些失望,不过后来发现整个框架还是用到了大量函数式特性的,只是不像我所想的那么纯粹(一个 pure functional 的框架大概也很难真正流行起来……)。...Observable的重要性可见一斑。让我们来看一个使用Observable的实例: empty empty creates an empty sequence....(1) Completed ---- empty observable demo: Completed 有点绕对不对,主要是因为继承太多,很多方法都要到父类中去找。...简化后的版本在这里,可能说这么多还不如大家自己 clone 下来看一眼来得明白。 小结 因为代码只看了个开头,所以我暂时还不能理解 RxSwift 中继承层级这么多的必要性。

1.2K20

设计模式学习之适配器模式

,是静态的定义方式;而对象适配器使用对象组合的方式,是动态组合的方式。...然而类适配器的明显缺点就是JAVA单继承的限制,当我们要适配的对象是两个类的时候,我们是不可能用adapter继承两个类的,所以就有了组合模式。...那么,你可能会有这样的想法,那就是让User不继承BaseEntity,把BaseEntity里面的代码全部挪动到User类中,或者继承Observable了,把Observable里面的代码全部挪到...如果你不继承Observable,而是把Observable里面的代码全部挪到User类里面,假设现在不仅User类可以被观察了,的Person类,Employee都能被观察了,那你就要把Observable...出于这样的考虑,我们采用对象适配器进行如下修改 //我们继承User,组合Observable. public class ObservableUser extends User{ private

33810

反应式编程详解

[ 图2 google趋势搜索结果 ] 在中国主要是北上广深和杭州,说明什么,这些技术还是一线城市的开发同学才会使用,查看左下角主要是主题都是java相关,查看右上角,浙江省用得比较多,说明阿里是主要的使用方...如果在队列中调用了其中一个,就不应该再调用另一个。...示例代码见附件 2.4 变换 变换常见的操作符有 6 个: buffer — 缓存,可以简单的理解为缓存,它定期从 Observable 收集数据到一个集合,然后把这些数据集合打包发射,而不是一次发射一个...zip — 使用一个函数组合多个 Observable 发射的数据集合,然后再发射这个结果。...学习反应式编程主要在于思维转换,因为之前主要使用同步式命令式编程的思维写程序,突然要换成以流的方式编写,思维必须要做转换,比如如何通过使用类似匹配、过滤和组合等转换函数构建集合,如何使用功能组成转换集合等等

2.8K30

观察者模式 Observer 发布订阅模式 源 监听 行为型 设计模式(二十三)

《Hold On, We're Going Home》是加拿大说唱歌手德雷克与制作组合Majid Jordan合作的节奏布鲁斯歌曲 第一句“I got my eyes on you”就是“一直关注你...ArrayList(); void f(){ //do sth... for(Observer o:observerList){ //调用相关方法 o.doSthElse(); } } 依赖倒置原则中,要求应该面向抽象进行编程...上面的结构中,不管是目标还是观察者的扩展都不方便,所以抽象提取。 ? 这就是观察者模式的基本结构。...一般包含一个方法叫做update()用以同步响应 抽象主题角色Subject 主题角色把所有观察者对象保存在集合中,提供管理工作,添加和删除 并且,提供通知工作,也就是调用相关观察者的update...Subject 继承Observable类,自定义了changeState()方法 在方法中,调用     setChanged();     notifyObservers(); 完成状态改变和通知

55530

C#设计模式总结

一、引言   经过这段时间对设计模式的学习,自己的感触还是很多的,因为现在在写代码的时候,经常会想想这里能不能用什么设计模式来进行重构。...PS: 其实,很早之前就看过所有的设计模式了,但是并没有写博客,但是不久就很快忘记了,也没有起到什么作用,这次以博客的形式总结出来,发现效果还是很明显的,因为通过这种总结的方式,对它理解更深刻了,也记住的更牢靠了...其实WCF内容很早也看过了,并且博客园也有很多前辈写的很好,但是,觉得还是需要自己总结,因为只有这样,知识才是自己的,别人写的多好,你看了之后,其实还是别人了,所以鼓励大家几点(对于这几点,也是对自己的一个提醒...它包括两种类型,一是类结构型模式,指的是采用继承机制来组合接口或实现;二是对象结构型模式,指的是通过组合对象的方式来实现新的功能。...如在.NET中WinForm中的控件,TextBox、Label等简单控件继承与Control类,同时GroupBox这样的组合控件也是继承于Control类。组合模式的具体结构图如下所示。 ?

1.7K20

Architecting Android with RxJava

然而使用RxJava的操作符,我们可以避免这些烦人甚至糟糕的回调,让结构和思路看起来更清晰,通过组合API,只需要约定最终的结果Observable就行了。...好了,不再举例了,因为官方文档已经给出了很详细的解释了,但是值得一提的是,如果使用Schedulers的工厂方法创建的Worker,一旦任务执行完毕,都应该调用worker.unsubscribe(....groupBy( ),分组操作符,虽然目前这个项目中没有用到,但是还是蛮喜欢它的,而且看到很多人在使用,将原始Observable根据不同的key分组成多个GroupedObservable,由原始...你应该使用像take(0)这样会丢弃自己的缓存的操作符。 如果你取消订阅一个GroupedObservable,那个Observable将会终止。...这个类涉及的代码大部分都是动画(注意Hardware Layer的使用)以及对屏幕旋转的处理,所以代码看起有点多。ForkView使用了一个简单的自定义Behavior。

47210

深入浅出 RxJS 之 合并数据流

因为 concat 开始从下一个 Observable 对象抽取数据只能在前一个 Observable 对象完结之后,所以参与到这个 concat 之中的 Observable 对象应该都能完结,如果一个...应该避免用 merge 去合并同步数据流, merge 应该用于合并产生异步数据的 Observable 对象,一个常用场景就是合并 DOM 事件。...zip 多个数据流 如果用 zip 组合超过两个 Observable 对象,游戏规则依然一样,组合而成的 Observable 吐出的每个数据依然是数组,数组元素个数和上游 Observable 对象数量相同..., combineLatest 记着呢,还可以继续使用这个“最新数据”。...多重继承可能会导致一些很反常识的问题,因为一个属性很难说清楚是从哪条关系继承下来的,所以在其他编程语言中往往放弃多重继承的功能。

1.5K10

Spring Cloud自定义Hystrix请求命令

在上篇文章中,我们介绍了断路器Hystrix的一个简单使用,主要是通过注解来实现断路器的功能的,不过对于Hystrix的使用,除了注解,我们也可以使用继承类的方式来实现,本文我们就来看看另一种Hystrix...---- ---- 本文所使用的服务注册中心、服务提供者和服务消费者都是我们在前文中搭建出来的,这里就不再赘述,不了解的小伙伴请翻看本系列前面几篇文章(文末提供了源码下载)。...自定义HystrixCommand 我们除了使用@HystrixCommand注解,也可以自定义继承自HystrixCommand,如下: public class BookCommand extends...(); 关于Observable小伙伴们可以自行度娘RxJava的用法,这里就不再赘述,就说下observe和toObservable的区别: 1.observe命令在调用的时候会立即返回一个Observable...,Hystrix自定义请求命令我们就先说这么多,整体上来看,还是注解要方便一些。

91430

响应式编程第二弹:RxJava 2设计探索

这里的下发动作应该属于业务范畴,按照我们在第3章最后所介绍的适配、装饰和代理来进行设计,这样就可以设计一个类首先继承Observable,得到源类型(这里是指ObservableCreate),然后设计一个具体的接口来承上启下...// 通过继承得到我们想要的服务类型 ? // 业务的封装 ?...再结合之前学过的各种操作组合,可以看到每经过一个操作就将上一个源对象和自己捆绑到一起,环环相扣。...其实在各种操作最后调用subscribe方法之前,我们会包装出一个对象,其ObservableSource字段实现了类似于继承的模式,通过强引用将各个操作所设定的Observable对象给串联起来,就好像绑在一根绳上的蚂蚱...然后我们会发现,在调用subscribe方法之后,最外层操作(即最后一个操作)返回的Observable对象会首先接触到自定义的Observer,而subscribeActual里的动作就是对传入的Observer

50310

《Head First 设计模式》学习心得笔记

Java自带 Observable 缺陷:Observable 是一个类,并不是接口,只能用继承方法创建一个派生类,而 Java 不支持多重继承,故限制了 Observable 的复用能力。 三....对象适配器与类适配器的主要区别在于传递请求的方式:对象适配器使用组合的方式,类适配器使用继承的方式; 装饰者模式与适配器模式的区别:装饰者模式的工作在于扩展其包装的对象的行为或责任,适配器模式仅仅进行接口的转换...,允许客户使用新的库和子集合,无须改变原来的任何代码; 外观模式:提供一个统一的接口,用来访问子系统中的一群接口。...,模板方法模式使用继承的方式; 九....单一责任原则:一个类应该只有一个引起变化的原因; 组合模式:允许将对象组合成树形结构来表现“整体 / 部分”的层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。核心思路是递归。

49230

Typescript 2+迷你书 :从入门到不放弃

Typescript难么 不夸大的说,若是常规使用,上手还是相当快的(有后端经验的小伙伴) 浓浓的C#风格,目前最新版本是typescript 2.2,简称它为ts2 注:文章的部分内容是会结合实际应用经验来说...,比如用于接口上传 ----- 记得导入 // 接口内的字段及类型会强制对应,不然会报错,这会让代码更加严谨; uploadUserInfo( personalParam: Personal ): Observable...: 只读 */ // 同理类也是必然可以继承的,但是不能多继承,不能多继承,不能多继承 // 依旧关键字是extends export class test1{ constructor(private...let a = Enum.A; let nameOfA = Enum[Enum.A]; // "A" 交叉类型 交叉类型就是复合类型,把多种类型汇总为一种类型,用 & 符号关联 , 常见用于多个对象的组合...至于更深入的,其实用的并不多,自己也没用到那些; 【d.ts和tsconfig.json的写法请看官方文档,有很详细的教程】, 安装这些就不说了 在这里汇总下之前遇到的问题及解决方案; 引入第三方库该怎么破

83010

柴毛毛大话设计模式——开发常用的设计模式梳理

有你们的肯定,才有继续分享的动力 如需转载,请与我联系! 人工智能看面相 最近忙里偷闲,对人工智能看面相进行了一些优化,欢迎各位大佬体验! 体验后恳请各位大佬分享朋友圈!...当再一次出现该类型的需求时,就不应该修改原有代码,只允许通过扩展来满足需求。 ---- 观察者模式 观察者模式是什么 如果出现如下场景需求时,就需要使用观察者模式。...需要增加 由一些基本功能排列组合 而产生的大量功能,从而使继承体系大爆炸。 类图描述 ?...通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。 缺点 这种比继承更加灵活机动的特性,也同时意味着更加多的复杂性。...设计原则 多用组合,少用继承。 利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。然而,如果能够利用组合的做法扩展对象的行为,就可以在运行时动态地进行扩展。

1.2K70

走进 RxSwift 之冷暖自知

关于标题 言归正传啊,今天还是想跟大家聊一聊 RxSwift ,之前写过一篇 走进 RxSwift 之观察者模式,讲解了 RxSwift 的部分实现。...这个观点很有意思,也就是说如果你自己声明了一个 Observable(遵守 ObservableType 协议),使用者并不知道它是 Cold 还是 Hot,只有你自己清楚,真正的“冷暖自知”。...使用场景 关于冷热 Observable 的异同,跟冷热信号的异同是类似的,网上已经有很多资料了,就不详细展开了。...如何一眼区别 CO 和 HO 前面也说过了,不管是冷是热,它们都是 Observable,虽然顺便提了几个 RxSwift 中典型的 CO 和 HO,但如果是一个自定义Observable 呢,要如何区分它是冷是热呢...冷热转换 虽然个人比较喜欢使用 CO,但有些场景确实是 HO 比较合适,那可以把一个 CO 转化为 HO 么?Observable 提供了一些操作用以返回 HO,最常用的是shareReplay。

2.3K10

设计模式走一遍---观察者模式(下)

上篇我们讲解了观察者模式的一些知识,而且自定义观察者模式的经典代码,(传送们:设计模式走一遍---观察者模式) 这篇简单讲一下JDK自带的观察者模式实现代码。...2.主题对象类(方法有点多,就不放英文解释了) //主题对象可以是接口、抽象类、具体类,我们上节说 //一般采用抽象类,不过JDK这里使用的是具体类 public class Observable {...//标记主题对象的状态是否改变 private boolean changed = false; //存放观察者集合,之所以用Vector而不用ArrayList //...从上面的代码中我们可以发现JDk内置的观察者模式中的主题对象是一个具体类,而不是一个抽象类或接口,而且setChange()方法还被保护起来了(被定义为protected),这就意味着,要在别的类中调用该方法,那么我们必须继承在子类中重写覆盖该方法...显然,觉得这很不友好….. 可能这也是JDK内置的观察者模式很少被拿来使用 的原因吧,一般都是自己来自定义观察者模式。 希望大家能够动手写一下这些代码,可能会碰到一些你没想到的问题。 完

24820

Kotlin委托

Kotlin中有委托,这个C#中也有,不过对于学Java的童鞋来说,这是什么鬼啊,到底是干什么用的… 在委托模式中,当有两个对象参与处理同一个请求是,接受请求的对象将请求委托给另一个对象来处理。...类委托 类 Derived 可以继承一个接口 Base,并将其所有共有的方法委托给一个指定的对象,也就是说把类 Derived 因继承而需要实现的方法委托给一个对象,从而不需要在该类内显式的实现: interface...Hello Hello 可观察属性 Observable 当属性值改变的时候运行函数方法。 Delegates.observable() 接受两个参数:初始值和修改时处理程序(handler)。...下面来总结一下委托使用的场景: 有多个类或属性重复使用同一段代码。...实现继承的代替方式 可以使用标准委托,来实现一些特殊的功能,当然,自己也可以自定义一些 其余的有待小伙伴们一起补充吆~ Vetoable\Not null 作 者:ChanghuiN 原文链接:http

1.4K30

C++程序员转向C#时的十大陷阱

限于译者时间和能力,文中倘有讹误,当以英文原版为准】 在最近发表于《MSDN Magazine》(2001年7月刊)上的一篇文章里,讲了“从C++转移到C#,你应该了解些什么?”。...在C#中,结构是一个简单的用户自定义类型,一个非常不同于类的轻量级的可选物。尽管结构支持属性、方法、字段和操作符,但结构并不支持继承或析构器之类的东西。...在数组中使用结构,在内存上会更有效率些,但若用在集合里,就不是那么有效率了。...集合需要引用类型,因此,若在集合使用结构,它就必须被装箱(参见陷阱四),而装箱和拆箱需要额外的负担,因此,在大的集合里,类可能会更有效。...事实上,使用类的方式还有“组合”(也有说为“嵌入”或“包容”(COM语义)等等),后者不存在下文所描述的问题】出ListBox和RadioButton类。

2.1K10

C#规范整理·集合和Linq

前言#   C#中的集合表现为数组和若干集合类。不管是数组还是集合类,它们都有各自的优缺点。如何使用集合是我们在开发过程中必须掌握的技巧。...不要小看这些技巧,一旦在开发中使用了错误的集合或针对集合的方法,应用程序将会背离你的预想而运行。 正文# ### 1.元素数量可变的情况下不应使用数组   在C#中,数组一旦被创建,长度就不能改变。...如果集合的数目固定并且不涉及转型,使用数组效率高,否则就使用List<T>(该使用数组的时候,还是使用数组) 顺序存储结构,即线性表。线性表可动态地扩大和缩小,它在一片连续的区域中存储数据元素。...# 如果要实现一个自定义集合类,不应该以一个FCL集合类为基类,而应该扩展相应的泛型接口。...FCL集合应该组合的形式包含至自定义集合类,需扩展的泛型接口通常是IEnumer-able<T>和ICollection<T>(或ICollection<T>的子接口,如IList<T>),前者规范了集合类的迭代功能

16630

C# 6.0 功能预览 (一)

一不小心发现 C# 已经到 6.0 了,现在项目中使用还是 4.0,这节奏,完全跟不上啊!...看到了@dotnetgeek的评论,非常感谢,认为是给我这样浮躁的人善意的警告,不应该盲目跟风追新,应该老老实实把现在的搞清楚,万变不离其宗 发现你是一个微软黑粉,语言的更新仅仅是多了一些特性,你懂... Dictionary 尽管上面的代码有些隐晦,但他还是一个键值对集合。...思考下,例如,一个简单的自定义集合类型(如,Queue),在其内部维护一个私有 System.Collections.Generic.List 属性列表。...当实例化集合时,就必须初始化这个包含列表的队列,但是,对于一个属性,这样做的合理方案是支持的字段需要有一个初始化器或其他构造函数,但是,这种组合的方式代码量几乎会翻番。

96950
领券