你好,我想创建我的自定义集合,我从 CollectionBase 类派生我的自定义集合类,如下所示:
public class MyCollection : System.Collections.CollectionBase
{
MyCollection(){}
public void Add(MyClass item)
{
this.List.Add(item);
}
}
class MyClass
{
public string name;
}
让我问几个问题:
- 在我处理 .NET 3.5 框架时,这种方法是否正确和新颖。
- 我想从我的 Web 服务 (WCF) 公开这个集合。我该怎么做?
- 我必须实现 GetEnumerator 吗?
- 这是否会绑定(bind)到 DataGridView。
最佳答案
源自 List<T>
有点毫无意义,尤其是现在它有 IEnumerable<T>
构造函数和扩展方法的可用性。除了 Equals
之外,它没有您可以覆盖的虚拟方法。 , GetHashCode
, 和 ToString
. (如果您的目标是为列表实现 Java 的 toString() 功能,我想您可以从 List<T>
派生。)
如果您想创建自己的强类型集合类并可能在添加/删除项目时自定义集合行为,您希望从新的(到 .NET 2.0 的)类型派生 System.Collections.ObjectModel.Collection<T>
,它保护了虚拟方法,包括 InsertItem
和 RemoveItem
您可以覆盖以在这些时间执行操作。请务必阅读文档 - 这是一个非常容易派生的类,但您必须认识到公共(public)/非虚拟和 protected /虚拟方法之间的区别。 :)
public class MyCollection : Collection<int>
{
public MyCollection()
{
}
public MyCollection(IList<int> list)
: base(list)
{
}
protected override void ClearItems()
{
// TODO: validate here if necessary
bool canClearItems = ...;
if (!canClearItems)
throw new InvalidOperationException("The collection cannot be cleared while _____.");
base.ClearItems();
}
protected override void RemoveItem(int index)
{
// TODO: validate here if necessary
bool canRemoveItem = ...;
if (!canRemoveItem)
throw new InvalidOperationException("The item cannot be removed while _____.");
base.RemoveItem(index);
}
}
关于c# - 如何在 .NET 2.0 中创建自定义集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1192022/