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.