c# - 抽象类——我是想多了还是做对了?

标签 c# generics abstract-class

所以我将 CollectionBase 用作自定义集合的继承类。我通过抽象类使用 CollectionBase,这样我就不会重复知识(遵循 DRY 原则)。抽象类也被定义为泛型类。这是我如何实现我的类(class):

 public abstract class GenericCollectionBase<T,C> : CollectionBase
 {
      //Indexders, virtual methods for Add, Contains, IndexOf, etc
 }

我利用它,所以我不必在 10 多个类中实现这些基本方法。

我的问题是,当我像这样覆盖 Equals 方法时,我是否做得太过分了:

    public override bool Equals(object obj)
    {
        if (obj is C)
        {
            GenericCollectionBase<T, C> collB = 
                obj as GenericCollectionBase<T, C>;

            if (this.Count == collB.Count)
            {
                for (int i = 0; i < this.Count; ++i)
                {
                    if (!this[i].Equals(collB[i]))
                        return false;
                }
                return true;
            }
        }
        return false;
    }

我是不是想用我的摘要完成太多事情,还是以正确的方式做这件事?

编辑:这是为 .Net 2.0 编写的,无法访问 3.5 以利用 LINQ 之类的东西

最佳答案

我不认为你想要完成太多。如果一个抽象类根本没有任何实现,或者没有其他定义功能的方法,那么它们就是接口(interface)。

我唯一要改变的是使用 EqualityComparer<T>而不是等于 this[i] 的比较和 collB[i] .

关于c# - 抽象类——我是想多了还是做对了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/542218/

相关文章:

java - 用于获取和调用具有通用父级的子级的方法的编程返回类型或转换

C# ESC POS 特殊字符

c# - 发送到服务器时如何加密我的消息?

c# - C# 泛型如何影响具有原语的集合

java - 将类文字作为交集类型返回

c# - 允许向接口(interface)属性添加访问器,但不允许向抽象属性添加访问器

c++ - 何时在抽象类 cpp 中声明 protected 字段

c# - 如何将C#中的单斜杠替换为双斜杠?

arrays - 采用数组和字典的协议(protocol)

c++ - C++ 中的多类型容器