Por ejemplocómo mejorar este método usando polimorfismo + sobrecarga para reducir IS (verificación de tipo)?
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;
}
}
donde InheritedA
, y InheritedB
son sus clases heredadas. De hecho, hay más clases heredadas y el Add
arroja resultados diferentes según el orden y los tipos de su operando.
Estoy pensando en reescribirlo usando Polimorfismo y sobrecarga, sin embargo, se vuelve bastante complicado, tengo que introducir un método de ayuda para resolver el tipo de cualquiera de los extremos.
p. Ej.
InheritedA myA()
{
public override int Add(BaseClass next)
{
return next.AddTo(this);
}
}
Ahora tengo que poner en AddTo
BaseClass
y anularlo en la clase heredada también.
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);
}
¿Hay una mejor manera de hacerlo?
¿Qué sucede una vez que hay una clase InheritedC? IE hace A + C = A + B? – Sign
¿Hay solo dos valores para cada operando (lval & rval)? – CAbbott
@CAbbott Puedo modificar mi clase para obedecer esta restricción, así que sí solo dos valores – colinfang