两种将工作相互委派的虚拟方法的良好做法

时间:2018-07-06 11:34:24

标签: c# oop override

以下情况: 一个接口声明了2个使用不同参数执行相同操作的方法。

interface IX
{
  string DoTheThing(A a);
  string DoTheThing(B b);
}

现在,可以将A的对象以一定的成本转换为B,反之亦然。 因此,我们可能要使用抽象类而不是看起来像这样的接口:

abstract class X
{
  public virtual string DoTheThing(A a) { return DoTheThing(a.ConvertToB()); }
  public virtual string DoTheThing(B b) { return DoTheThing(b.ConvertToA()); }
}

通过这种方式,子类只需要实现其中的一种方法即可。 但是,它必须至少实现其中之一,否则我们将获得无限递归。 现在的问题是,我是否应该使其中一种方法抽象并强制实施? 问题在于,我必须选择一种方法,而这可能是错误的一种 一些子类并带来更多转化。

第二个问题是关于我是否缺少某些语言功能的更好解决方案或更好的解决方案 设计决策(或者我是否对此考虑过多)?

P.S我正在使用C#,但答案并不仅限于C#。

0 个答案:

没有答案