8

私が定義したクラスから継承する独自のクラスをユーザーが作成する必要があるアルゴリズムを作成しています。ただし、このアルゴリズムでは、ユーザーが C# 標準ライブラリの Equals 関数と GetHashCode 関数をオーバーライドする必要があります。

自分のクラスから継承したクラスに、GetHashCode 関数と Equals 関数を強制的に実装することはできますか?

public abstract int GetHashCode();

これを基本クラスに記述することはオプションではありません。基本クラスは、既に実装されている親から GetHashCode を継承するためです。

4

3 に答える 3

14

これはあなたが探しているものです。あなたのクラスは抽象的であるため、ほとんど問題なくこれを行うことができます。

public abstract override int GetHashCode();

これは、他のクラスから派生したにもかかわらず、サブクラスがこのメソッドをオーバーライドする必要があります。

于 2013-11-05T14:23:58.337 に答える
3

GetHashCode抽象化されEquals、クラスから呼び出される 2 つの新しいメソッドを作成できます。

例:

public abstract ParentClass {
    public abstract int MyGetHashCode();

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

    // same thing for Equals
}
于 2013-11-05T14:24:38.737 に答える
0

あなたのクラスで:

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

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

これは、オーバーライドしないと、関数が例外によって失敗することを意味します。これにより、機能させるためにオーバーライドする必要があります。

于 2013-11-05T14:24:17.310 に答える