Cercando di praticare LSP, il seguente non mi è chiaro:
Liskov requirements (some)
-There must be contravariance of the method arguments in the subtype.
– There must be covariance of the return types in the subtype.
Anche il metodo in una sottoclasse può essere dichiarato con un tipo di parametro più generico rispetto alla classe base, giusto? Ma per quanto ne so, non funziona, come ho provato in C #:
class A
{
public virtual void Test(Cat a)
{ }
}
class B : A
{
public override void Test(Animal a) //shouldn't this work to be Liskov compliant?
{
}
}
class Animal
{ }
class Cat : Animal
{ }
Poiché, per quanto ne so, CLR non supporta la covarianza tranne i delegati e i generici, come possiamo implementare un codice veramente conforme a LSP se questo non può essere soddisfatto?