Aart Stuurman
Aart Stuurman

Reputation: 3628

Force child class to override function of ancestor via parent

I am writing an algorithm which requires the user to create his own class which inherits from a class defined by me. However, the algorithm requires the user to override the Equals and GetHashCode functions from the C# standard libraries.

Can I force the class inherited from my class to implement the GetHashCode and Equals functions?

public abstract int GetHashCode();

Writing this in my base class is not an option, as my base class inherits GetHashCode from it's parent, where it is implemented already.

Upvotes: 9

Views: 2531

Answers (3)

Euphoric
Euphoric

Reputation: 12859

You can create 2 new methods that will be abstract and will be called from GetHashCode and Equals your class.

Example:

public abstract ParentClass {
    public abstract int MyGetHashCode();

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

    // same thing for Equals
}

Upvotes: 3

SynerCoder
SynerCoder

Reputation: 12786

In your class:

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

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

This means that if they don't override it the function will fail by exception. This forces them to override it to get it to work.

Upvotes: 0

Sriram Sakthivel
Sriram Sakthivel

Reputation: 73502

This is what you're looking for. Since your class is abstract you can pretty much do this without any problem.

public abstract override int GetHashCode();

This despite of it derived from some other class, this makes your sub class must override this method.

Upvotes: 15

Related Questions