.NET扩展事件

JRS*_*JRS 2 .net events extension-methods

我想为一些内置的.NET类添加事件.例如,我想将以下事件添加到泛型List(T):

  • ItemAdded
  • ItemRemoved
  • 引发ListChanged
  • 等等

我可以想到几种方法来实现这一目标,但我不确定哪种方法最好.

  1. 我可以使用" 扩展事件 ",也就是说,如果有这样的事情或方法来使用扩展方法来模拟类似事件的功能.
  2. 我可以继承List(T)覆盖必要的方法和属性.
  3. 我可以继承List(T)遮蔽必要的方法和属性.
  4. 我可以创建一个实现一个新的类IList(T),然后包装其余的功能List(T)IList(T)缺失.

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

每种方法有哪些优点,缺点和注意事项?

注意:我并不特别关注IList(T).我发现自己也希望将"扩展事件"添加到其他类中.

Jon*_*eet 6

  1. 没有"扩展事件"这样的东西,你不能使用扩展方法来模拟这个:扩展事件不能将状态添加到现有的类,这是你需要的.

  2. 我认为你的意思是覆盖而不是超载.这会起作用,这有点笨拙 - 意味着你不能使用ToListLINQ等的法线,因为那样你就得到了一个List<T>.

  3. 暗影比重写更糟糕.这意味着可以根据调用者调用方法的方式引发或不引发事件.伊克.

  4. 这将是更好的,你可以添加一个扩展方法List<T>来包装它.一个缺点是,如果其他人"知道" 未打开的集合,您将不会发现这样做的更改.

你看过了ObservableCollection<T>吗?请注意,如果您在构造函数中提供它,它将从列表中复制,而不是包装列表.