usr usr - 1 month ago 10
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
Object.GetHashCode()
from
B.GetHashCode()
?

edit:
B
now inherits from
A
.

Answer

(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).

Comments