首页
学习
活动
专区
工具
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.3K20
  • 设计模式学习之适配器模式

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

    36110

    反应式编程详解

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

    2.9K30

    C# 开发人员都应该了解的基本知识

    作为一名资深软件工程师,我深知在实际项目中掌握C#高级概念的价值所在。本指南将深入探讨每个C#开发人员都应该了解的重要且影响力大的特性,并辅以实际示例和最佳实践,以提升代码质量、可维护性以及性能。...谨慎使用虚方法:仅在必要时进行重写。 对于复杂关系,优先选择组合而非继承。 基于接口的编程:实现灵活性与可测试性 接口能够使系统更灵活、更易于测试,减少依赖关系并提高可维护性。...使用自定义异常:针对特定领域使用自定义异常,以便清晰地跟踪错误。 保留内部异常:保留内部异常的详细信息,以便调试。...掌握诸如继承、基于接口的编程、委托、异常处理、线程安全以及属性这些C#高级概念,能让你编写出健壮、可扩展且易于维护的代码。这些技术对于构建满足当今高可靠性和高性能标准的应用程序来说必不可少。...关键要点 继承:谨慎使用,在适当的时候优先选择组合。 接口:围绕行为进行设计,促进可测试的代码编写。 委托和事件:用于事件驱动和响应式应用程序。 异常处理:使用自定义异常有意义地处理错误。

    8300

    Architecting Android with RxJava

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

    49210

    观察者模式 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(); 完成状态改变和通知

    58330

    C#设计模式总结

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

    1.8K21

    深入浅出 RxJS 之 合并数据流

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

    1.7K10

    Spring Cloud自定义Hystrix请求命令

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

    96230

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

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

    52310

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

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

    54330

    走进 RxSwift 之冷暖自知

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

    2.4K10

    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的写法请看官方文档,有很详细的教程】, 安装这些就不说了 在这里汇总下我之前遇到的问题及解决方案; 引入第三方库该怎么破

    85910

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

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

    1.3K70

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

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

    26320

    观察者模式详解

    lisa, 食物:外婆菜炒蛋,价格:18.00,菜品类型:热菜 JDK已经帮我们实现了观察者模式,Observable相当于Subject,Observer同上自定义的Observer,只有一个方法:...,发布时间:Thu Nov 23 16:53:18 CST 2017 因为Observable是一个“类”,你必须设计一个类继承它。...如果某类想同时 具有Observable类和另一个超类的行为,就会陷入两难,毕竟Java不支持多重继承。 这限制了Observable的复用潜力....再者,因为没有Observable接口,所以无法建立自己的实现和Java内置的 Observer搭配使用,也无法将java.util的实现换成另一套做法的实现(比方说, 如果你能够扩展java.util.Observable...这意味着:除非你继承自Observable,否则你无法创建Observable实例并组合到你自己的对象中来。

    745100

    Kotlin委托

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

    1.5K30
    领券