C# 通过父类强制子类重写父类的函数

C# 通过父类强制子类重写父类的函数,c#,inheritance,C#,Inheritance,我正在编写一个算法,要求用户创建自己的类,该类继承自我定义的类。但是,该算法要求用户重写C#标准库中的Equals和GetHashCode函数 我可以强制从类继承的类实现GetHashCode和Equals函数吗 public abstract int GetHashCode(); 在我的基类中编写它不是一个选项,因为我的基类从它的父类继承了GetHashCode,它已经在父类中实现了。这就是您要寻找的。因为你的类是抽象的,所以你几乎可以毫无问题地做到这一点 public abstract o

我正在编写一个算法,要求用户创建自己的类,该类继承自我定义的类。但是,该算法要求用户重写C#标准库中的Equals和GetHashCode函数

我可以强制从类继承的类实现GetHashCode和Equals函数吗

public abstract int GetHashCode();

在我的基类中编写它不是一个选项,因为我的基类从它的父类继承了GetHashCode,它已经在父类中实现了。

这就是您要寻找的。因为你的类是抽象的,所以你几乎可以毫无问题地做到这一点

public abstract override int GetHashCode();
尽管它派生自其他类,但这使得子类必须重写此方法。

在类中:

public override bool Equals(object obj)
{
    throw new System.NotImplementedException();
}

public override int GetHashCode()
{
    throw new System.NotImplementedException();
}

这意味着,如果他们不重写它,函数将因异常而失败。这迫使它们重写它以使其工作。

您可以创建两个新方法,它们将是抽象的,并将从
GetHashCode
类中调用

例如:

public abstract ParentClass {
    public abstract int MyGetHashCode();

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

    // same thing for Equals
}

你的课抽象吗?是的,我的课抽象。在这个类中抽象定义的新函数按照我的要求工作。“我正在编写一个算法,要求用户创建自己的类,该类继承自我定义的类。”。现在停下来。继承已经够糟糕的了,但不强迫人们使用它。定义一个接口。让他们自己写课程。友好一点。@AartStuurman:接口强制实现方法。否则代码将无法编译。@Wim-每个类都有一个GetHashCode和Equals的实现。将这些方法放到接口中是没有意义的,因为每个类都已经从对象类定义了这些方法。这似乎正是我想要的。至少它已编译,所以我将测试它是否符合我的要求。这是我的第二个选项,尽管我不喜欢助手函数。这也是一个非常有趣的选项。如果我找不到别的办法,我会试试看。