C# 作为哈希键但用于派生类的对象标识

C# 作为哈希键但用于派生类的对象标识,c#,inheritance,interface,C#,Inheritance,Interface,我有一个场景,其中一些遗留代码使用“Base”类型的对象作为字典中的键 我有一个包装器类,它除了“Base”对象之外还做一些工作,称为“BaseAggregate”。它不是继承base,而是实现一个公共接口,而是将大部分工作分派到“base” 发生的情况是,一些代码路径正在添加对象“Base”作为字典的键。我无法更改此代码,但是我可以更改Equals和GetHashCode以使用相同的对象作为equality class BaseAggregate : IBase { private

我有一个场景,其中一些遗留代码使用“Base”类型的对象作为字典中的键

我有一个包装器类,它除了“Base”对象之外还做一些工作,称为“BaseAggregate”。它不是继承base,而是实现一个公共接口,而是将大部分工作分派到“base”

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

class BaseAggregate : IBase
{
     private readonly IBase foo = new 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应该是什么?

是否公开了返回
foo
的方法或属性?如果是这样,那么在字典中聚合和内部的
foo
将被认为是相等的。那么您的实际目标是什么<代码>但是,我可以更改Equals和GetHashCode以使用相同的对象作为相等项。使我相信您希望阻止将对象添加到字典中。