对象标识为散列键,但用于派生类

时间:2014-04-09 07:40:11

标签: c# inheritance interface

我有一个场景,其中一些遗留代码正在使用" Base"类型的对象。作为字典中的一个关键。

我有一个包装类,除了" Base"之外还可以做一些工作。对象,称之为" BaseAggregate"。它不是继承基础,它实现了一个通用的接口,但是将大部分工作分配给" Base"。

正在发生的是一些代码路径正在添加对象" Base"作为字典的关键。我无法更改此代码,但我可以将我的Equals和GetHashCode更改为使用相同的对象作为相等。

class BaseAggregate : IBase
{
     private readonly IBase foo = new Base();
}

人们将Base对象作为关键。

    public override bool Equals(object obj)
    {
        if (obj is BaseAggregate)
        {
            return base.Equals(obj);
        }

        if (obj is Base)
        {
            return this.foo.Equals(obj);
        }

        return false;
    }

这是一个很好的实施吗?我的GetHashCode应该是什么?

0 个答案:

没有答案