usr usr - 11 months ago 57
C# Question

How to call a second-level base class method like base.base.GetHashCode()

class A
public override int GetHashCode()
return 1;
class B : A
public override int GetHashCode()
return ((object)this).GetHashCode();

new B().GetHashCode()

this overflows the stack. How can I call

now inherits from

Answer Source

(edit - misread question)

If you want to get the original object.GetHashCode() version; you can't - at least, not unless A makes it available via something like:

protected int GetBaseHashCode() { return base.GetHashCode();}

(and have B call GetBaseHashCode()).

The reason it overflows is that GetHashCode is (obviously) virtual - it doesn't matter if you cast it to object; it still starts at the most-derived implementation in the actual object, i.e. B.GetHashCode() (hence the explosion).