Se un'interfaccia specifica una proprietà o un metodo per restituire un'altra interfaccia, perché non è consentito alle implementazioni della prima interfaccia di "modificare" il tipo restituito in un tipo più specifico?Perché l'implementazione dell'interfaccia non può restituire un tipo più specifico?
Facciamo un esempio per illustrare:
interface IFoo
{
IBar GetBar();
}
interface IBar
{ }
class Foo : IFoo
{
// This is illegal, we are not implementing IFoo properly
public Bar GetBar()
{
return new Bar();
}
}
class Bar : IBar
{ }
So come farlo funzionare, questo è non la mia preoccupazione.
posso solo uno:
- Cambio tipo di ritorno di
GetFoo()
-IBar
, o - esplicitamente implementare l'interfaccia e basta chiamare
GetBar
dallaIFoo.GetBar()
metodo
Quello che sto veramente chiedendo è il ragionamento per non limitarsi a compilare il codice sopra. C'è qualche caso in cui quanto sopra non soddisfa il contratto specificato da IFoo
.
C'è un terzo modo, che è leggermente più conveniente rispetto ai due precedenti. È possibile implementare l'interfaccia con una classe astratta. E poi, nella tua classe "concreta" erediti la classe astratta invece dell'interfaccia. Quindi nella tua classe "concreta", puoi nascondere i metodi di base con la "nuova" parola chiave. Funziona decentemente per me. – BrainSlugs83
Mi sento come il commento di BrainSlugs83 qui è una risposta in quanto fornisce una soluzione decente. –