Ho una gerarchia di classi abbastanza semplice:
public class Base
{
//...
public virtual void AssignFrom(Base baseObj)
{
//DoSomeStuff
}
}
public class DerivedA : Base
{
//...
public override void AssignFrom(Base derivedObj)
//Wish Method would be:
//public override void AssignFrom(DerivedA derivedObj)
{
base.AssignFrom(derivedObj);
var objAsDerivedA = derivedObj as DerivedA;
//Some other stuff concerning derived class
}
}
public class DerivedB : Base
{
//...
public override void AssignFrom(Base derivedObj)
//Wish Method would be:
//public override void AssignFrom(DerivedB derivedObj)
{
base.AssignFrom(derivedObj);
//Here I have to cast, what I would gladly avoid.
var objAsDerivedB = derivedObj as DerivedB;
//Some other stuff concerning derived class
}
}
Ciò che mi infastidisce è che ogni fratello della classe derivata o della sua discendente può essere usato come parametro.
Sarebbe possibile creare un proprio metodo non virtuale per ogni classe, ma a mio parere l'associazione / connessione tra i metodi andrà persa.
Domanda: esiste un modo per limitare il parametro del metodo alla classe, in cui il metodo viene sovrascritto.