BaseClass MyBase()
{
public int Add(BaseClass next)
{
if (this is InheritedA && next is InheritedA)
return 1;
else if (this is InheritedA && next is InheritedB)
return 2;
else if (this is InheritedB && next is InheritedA)
return 3;
else if (this is InheritedB && next is InheritedB)
return 4;
}
}
dove InheritedA
e InheritedB
sono le classi ereditate. In effetti, ci sono più classi ereditate e lo Add
restituisce risultati diversi in base all'ordine e ai tipi del suo operando.
Sto pensando di riscriverlo usando il Polymorphism e il sovraccarico, tuttavia, diventa piuttosto complicato, devo introdurre un metodo di supporto per risolvere il tipo di entrambe le estremità.
ad es.
InheritedA myA()
{
public override int Add(BaseClass next)
{
return next.AddTo(this);
}
}
Ora devo mettere in AddTo
BaseClass
, e sovrascrivere in classe ereditata pure.
InheritedA myA()
{
public override int AddTo(InheritedA next) { return 1; }
public override int AddTo(InheritedB next) { return 3; }
}
BaseClass myBase()
{
public abstract int Add(BaseClass next);
public abstract int AddTo(InheritedA next);
public abstract int AddTo(InheritedB next);
}
C'è un modo migliore di farlo?
Cosa succede quando c'è una classe InheritedC? IE fa A + C = A + B? – Sign
Esistono solo due valori per ogni operando (lval & rval)? – CAbbott
@CAbbott Posso modificare la mia classe per obbedire a questa limitazione, quindi sì solo due valori – colinfang