我正在编写一个算法,它要求用户创建自己的类,该类继承自我定义的类。但是,该算法要求用户覆盖 C# 标准库中的 Equals 和 GetHashCode 函数。
我可以强制从我的类继承的类实现 GetHashCode 和 Equals 函数吗?
public abstract int GetHashCode();
在我的基类中编写它不是一种选择,因为我的基类从它的父类继承 GetHashCode,它已经在其中实现。
我正在编写一个算法,它要求用户创建自己的类,该类继承自我定义的类。但是,该算法要求用户覆盖 C# 标准库中的 Equals 和 GetHashCode 函数。
我可以强制从我的类继承的类实现 GetHashCode 和 Equals 函数吗?
public abstract int GetHashCode();
在我的基类中编写它不是一种选择,因为我的基类从它的父类继承 GetHashCode,它已经在其中实现。
这就是你要找的。由于您的课程是抽象的,您几乎可以毫无问题地做到这一点。
public abstract override int GetHashCode();
尽管它是从其他类派生的,但这使得您的子类必须覆盖此方法。
GetHashCode
您可以创建 2 个新方法,这些方法将是抽象的,将从Equals
您的类中调用。
例子:
public abstract ParentClass {
public abstract int MyGetHashCode();
public override int GetHashCode(){
return MyGetHashCode();
}
// same thing for Equals
}
在你的课堂上:
public override bool Equals(object obj)
{
throw new System.NotImplementedException();
}
public override int GetHashCode()
{
throw new System.NotImplementedException();
}
这意味着如果他们不覆盖它,该函数将因异常而失败。这迫使他们覆盖它以使其正常工作。