Override a Child Class’ Parent Method

C# seems to fail in an advanced use of polymorphism, as demonstrated by the following code:

class AReturn {}class BReturn : AReturn {}class A{   public virtual AReturn GetReturn() {...}}class B{   public override BReturn GetReturn() {...}}

The compiler complains that, in class B, GetReturn is not returning an AReturn even though BReturn inherits from AReturn. Here’s a simple workaround for this situation:

class AReturn {}class BReturn : AReturn {}class A{   public AReturn GetReturn() { return InternalGetReturn(); }   protected virtual AReturn InternalGetReturn() {...}}class B{   public new BReturn GetReturn() { return (BReturn)InternalGetReturn();}   protected override AReturn InternalGetReturn() {...}}

Unfortunately, you’re required to use an explicit cast?but this should be safe as long as class B’s InternalGetReturn and those of any of its subclasses return an object that is a BReturn.

Share the Post:
Share on facebook
Share on twitter
Share on linkedin

More From DevX