如何强制从抽象类派生的类实现GetHashCode

时间:2018-06-22 14:39:39

标签: c# .net oop

我有一个基类

 local.set('user.session.timeout', false);
 local.set('user.name', {first:'john', last:'doe', mi:'c'});
 local.set('user.PIN', 8675309);

,我想确保派生类实现自己的自定义public abstract class MyBaseClass() { // ... } 方法。是

GetHashCode

做到这一点的方式,还是整个创意代码都闻到了?

2 个答案:

答案 0 :(得分:4)

除了类声明中的语法错误之外,这确实是我建议做的事情。

我可能同时使Equals抽象-在没有另一个的情况下覆盖其中一个是很奇怪的:

public abstract class MyBaseClass
{
    public abstract override bool Equals(object obj);
    public abstract override int GetHashCode();
}

您可以使用另一个(现已删除)答案中建议的模板模式方法,但是如果您想在基类中应用一些逻辑,例如将哈希码提供的哈希码与其他内容结合起来。

如果您只想强制重新实现,那么用抽象方法覆盖object方法似乎很合适。

答案 1 :(得分:0)

也许是这样?

public abstract class MyClass
{
    public abstract int GetHashCodeInternal();

    public override int GetHashCode()
    {
        return GetHashCodeInternal();
    }
}