【发布时间】:2013-12-27 22:06:42
【问题描述】:
随意装上你的枪并瞄准,但我想了解你为什么不应该这样做。
我创建了一个自定义类,旨在替换 List 的任何实例(我用它来更新它们后面的 XML 对象):
public class ListwAddRemove<T> : List<T> {
public event EventHandler<ListModifyEventArgs> OnAdd;
public event EventHandler<ListModifyEventArgs> OnRemove;
new public void Add(T o) {
base.Add(o);
if (OnAdd != null) {
OnAdd(this, new ListModifyEventArgs(o));
}
}
new public void Remove(T o) {
base.Remove(o);
if (OnRemove != null) {
OnRemove(this, new ListModifyEventArgs(o));
}
}
}
这个想法是每当我从这个列表中添加或删除一个项目时,我的绑定事件都会触发,我可以自动处理后面的 XML。
这就像一个魅力,到目前为止一切顺利。
但是如何处理 object.ToList() 和我的派生版本之间的转换?
很多人说你应该从 Collection 派生而不是......为什么?
【问题讨论】:
-
你听说过 ObservableCollection 吗? msdn.microsoft.com/en-au/library/ms668604(v=vs.110).aspx 和 stackoverflow.com/questions/3167752/…
-
我使用的是 Windows Forms .Net 3.5
-
使用
new修饰符对基类隐藏成员绝不是一个好主意。如果您真的想从List<>派生,请给您的方法一些新名称,例如AddAndRaiseEvent或类似名称。然而,List<>类并不是真正为这种用途而设计的。还有其他类提供更多virtual成员,以便在继承它们时有所帮助。 -
@user1830285 ObservableCollection 在 .Net 3.5 中仍然可用,并且可以与 Windows 窗体一起使用,它只是一个实现
INotifyCollectionChanged和INotifyPropertyChanged接口的集合。请参阅stackoverflow.com/questions/4279185/… 了解更多信息。
标签: c# linq collections derived-class