c# - 如何在 .NET 2.0 中创建自定义集合

标签 c# wcf generics datagridview

你好,我想创建我的自定义集合,我从 CollectionBase 类派生我的自定义集合类,如下所示:

public class MyCollection : System.Collections.CollectionBase
{
    MyCollection(){}
    public void Add(MyClass item)
    {
        this.List.Add(item);
    }
}

class MyClass
{
    public string name;
}

让我问几个问题:

  1. 在我处理 .NET 3.5 框架时,这种方法是否正确和新颖。
  2. 我想从我的 Web 服务 (WCF) 公开这个集合。我该怎么做?
  3. 我必须实现 GetEnumerator 吗?
  4. 这是否会绑定(bind)到 DataGridView。

最佳答案

源自 List<T>有点毫无意义,尤其是现在它有 IEnumerable<T>构造函数和扩展方法的可用性。除了 Equals 之外,它没有您可以覆盖的虚拟方法。 , GetHashCode , 和 ToString . (如果您的目标是为列表实现 Java 的 toString() 功能,我想您可以从 List<T> 派生。)

如果您想创建自己的强类型集合类并可能在添加/删除项目时自定义集合行为,您希望从新的(到 .NET 2.0 的)类型派生 System.Collections.ObjectModel.Collection<T> ,它保护了虚拟方法,包括 InsertItemRemoveItem您可以覆盖以在这些时间执行操作。请务必阅读文档 - 这是一个非常容易派生的类,但您必须认识到公共(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/

相关文章:

Java 泛型方法约束 - 从约束中排除类型以防止删除问题?

c# - 如何仅从法向量获取下向量?

c# - 我在哪里可以找到 .NET 框架包装的所有 "COR_E_"HRESULT 的引用?

c# - Xamarin 表单 - 加载页面最佳实践

java - 错误 : Generic Array Creation

c++ - 在 Swift 中定义显式泛型方法

c# - 以编程方式设置代理地址、端口、用户名、密码

asp.net - wcf 使用 basichttpBinding 实现用户名和密码安全 - 基于消息

c# - 在 C# 服务中获取连接字符串

.net - 带有 PHP 客户端的 WCF 服务 - 复杂类型作为参数不起作用