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 castbut 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.