具有不同返回类型的继承和函数

时间:2016-05-17 17:03:20

标签: c# inheritance polymorphism override virtual

我设置了以下类:

class Test
{
    public virtual subSmallObject CreateSmallObject
   {
       return new subSmallObject();
   }
}

abstract class subSmallObject
{  string test;  }
class subSmallObjectA : subSmallObject
{  string testA;  }
class subSmallObjectB : subSmallObject
{  string testB;  }    

现在,我不需要在任何地方使用Test类,而是需要使用派生类Test,让我们称它们为TestA和TestB类。测试A和B需要让CreateSmallObject类返回subSmallObjectA或SubSmallObjectB。

所以通常我可以做

class TestA : Test
{
    override subSmallObject CreateSmallObject()
    {
        return new subSmallObjectA();
    }
}
class TestB : Test
{
    override subSmallObject CreateSmallObject()
    {
        return new subSmallObjectB();
    }
}

但问题是我无法将subSmallObject从那些返回到subSmallObjectA或subSmallObjectB,因为他对手头的任务有所要求(它会破坏很多我不会做的事情)控制权。那些东西要么是smallSubObjectA,要么是subSmallObjectB)。 subSmallObjectA和subSmallObjectB之间将有共享元素。我不想消除虚函数,因为如果有两种不同的方法,一些代码将被重复。

那里有任何我失踪的模式或任何练习吗?我对此有点失落,这样的架构变化超出了我的范围,因为我并不真正了解"正确的"这样做的方式。

1 个答案:

答案 0 :(得分:0)

无法转换方法调用的结果是......奇怪的。 如果你绝对不能,你可以尝试一种通用的工厂方法:

class SubObject{
    public string Data;
}
class SubObjectA{
}
class SubObjectB{
}
class Test{
    T GetSubObject<T>() where T:SubObject,new()
    {
        return new T();
    }
}

使用像

SubObjectA so=testInstance.GetSubObject<SubObjectA>();

这样你就不必在通话现场进行演员表演了。如果SubObject没有默认的构造函数,它就无法工作。