c# – 自定义(派生)列表
发布时间:2020-12-15 04:19:31 所属栏目:百科 来源:网络整理
导读:随意加载你的枪并瞄准,但我想明白为什么你不应该这样做. 我创建了一个自定义类,用于替换List的任何实例(我用它来更新它们后面的XML对象): public class ListwAddRemoveT : ListT { public event EventHandlerListModifyEventArgs OnAdd; public event Event
随意加载你的枪并瞄准,但我想明白为什么你不应该这样做.
我创建了一个自定义类,用于替换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中衍生出来……为什么? 解决方法
你应该从Collection< T>派生出来.因为它旨在允许您覆盖InsertItem,而RemoveItem则用于添加自定义行为,例如您正在执行的操作(也是SetItem,以在更改现有项目时添加自定义行为).
因此,它可以用作IList< T>,并且任何插入/移除将自动使用定制. 在你的情况下,任何人都会转向IList< T>或者基类List< T>将绕过您的自定义添加/删除功能. 收集和LT; T>还提供了一个包装现有列表的构造函数.您可以从派生类中公开它以包装由Enumerable< T> .ToList()生成的列表. UPDATE
非常简单: public class ListwAddRemove<T> : Collection<T> { public ListwAddRemove<T>() { } public ListwAddRemove<T>(IList<T> list) : base(list) { } ... implementation of overrides for InsertItem,SetItem,RemoveItem ... } 然后使用如下: IList<SomeType> list = ....ToList(); ListwAddRemove<SomeType> myList = new ListwAddRemove<SomeType>(list); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |