首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET扩展事件

.NET扩展事件
EN

Stack Overflow用户
提问于 2009-09-17 16:31:57
回答 2查看 253关注 0票数 2

我想将事件添加到.NET类中的一些内置类中。例如,我希望将以下事件添加到通用List(T)

  • ItemAdded
  • ItemRemoved
  • ListChanged
  • etc

我可以想出几种方法来完成这个任务,但我不确定哪种方法是最好的。

functionality.

  • I i可以使用“扩展事件”,也就是说,如果有这样的东西或方法来模拟类似事件的方法,properties.

  • I可以从List(T)继承并覆盖必要的方法,properties.

  • I可以从List(T)继承并隐藏必要的方法和属性。

  • I可以创建一个实现IList(T)的新类,然后包装IList(T)缺少的List(T)的其余功能。

显然,选项4是最多的工作,如果我只想扩展一个类,这不是什么大问题。不过,我也想避免不良的副作用。

每种方法的优点、缺点和注意事项是什么?

注意:我并不是特别关心IList(T)。我发现自己也想把“扩展事件”添加到其他类中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-17 16:36:50

  1. 没有所谓的“扩展事件”,您不能使用扩展方法来模拟这种情况:扩展事件不能将状态添加到现有的类中,这正是您所需要的。
  2. ,我认为您的意思是覆盖而不是重载。这会有效的,这有点笨拙-这意味着您不能使用来自LINQ的普通ToList,因为这样您就会得到一个比重写更麻烦的ToList。这意味着根据调用方调用方法的方式,事件可能引发也可能不会引发。Ik.
  3. 这样更好,您可以在List<T>中添加一个扩展方法来包装它。一个缺点是,如果其他人“知道”未包装的集合,您将不会发现以这种方式进行的更改。

你看过ObservableCollection吗?注意,如果在构造函数中提供列表,这将从列表中复制,而不是包装列表。

票数 6
EN

Stack Overflow用户

发布于 2009-09-17 16:35:38

“扩展事件”不存在,扩展属性或除扩展方法以外的任何东西也不存在。就我个人而言,我希望看到扩展属性(考虑到它们只是函数的包装器),但我不确定如何以扩展所需的静态方式实现扩展事件。

没有什么可以阻止您将这些事件添加到类本身。但是,您可能会更成功地查看BindingList<T>,因为它更符合您似乎想要做的监视活动。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1439923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档