Например,
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;
}
}
, где InheritedA
и InheritedB
— его унаследованные классы. На самом деле существует больше унаследованных классов, и Add
возвращает разные результаты в зависимости от порядка и типов его операндов.
Я думаю переписать его с использованием полиморфизма и перегрузки, однако это становится довольно сложным, я должен ввести вспомогательный метод для разрешить тип любого конца.
например,
InheritedA myA()
{
public override int Add(BaseClass next)
{
return next.AddTo(this);
}
}
Теперь я должен поместить AddTo
в BaseClass
и переопределить его также в унаследованном классе.
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);
}
Есть ли лучший способ сделать это?