Ok, sto cercando di fare quanto segue:Metodo sovraccarico: imbuto chiamata a sovraccarico argomento classe derivata
protected bool ValidAdvert(Base item)
{
throw ThisIsAnAbstractClassException();
}
protected bool ValidAdvert(Derived1 item)
{
return ADerived1SpecificPredicate;
}
protected bool ValidAdvert(Derived2 item)
{
return ADerived2SpecificPredicate;
}
e hanno le versioni classe derivata del metodo chiamato, quando una classe base viene passata al il metodo. La classe base è astratta quindi dovrebbe essere teoricamente possibile?
Prima che qualcuno dica qualcosa sull'overloading del metodo sulle classi stesse, la logica all'interno dei metodi si basa su un gran numero di condizioni diverse, nessuna delle quali è correlata, e nessuna delle quali correlata direttamente alla classe Base/Derivata (come ad esempio lo stato di accesso, etc.)
Anche intelligente, ed evita di fare scherzi con le varie classi derivate (vorrei che ce ne fossero solo 2!). –
piuttosto note: è necessario eseguire il cast per il ritorno, e method.Invoke prende un [] di oggetti, e così craps out se si tenta di passare solo il 1 :) Grazie però! –
@Ed - Penso che mantenere il predicato con la classe derivata sia in realtà il metodo preferito. Memorizzare la logica specifica della classe derivata in una classe base crea un accoppiamento inverso tra i due. Non la vedo come una cosa buona. La classe base non dovrebbe aver bisogno di sapere nulla delle sue classi derivate. – tvanfosson