继承和功能具有不同的返回类型
问题描述:
我有以下类别设置是这样的:继承和功能具有不同的返回类型
class Test
{
public virtual subSmallObject CreateSmallObject
{
return new subSmallObject();
}
}
abstract class subSmallObject
{ string test; }
class subSmallObjectA : subSmallObject
{ string testA; }
class subSmallObjectB : subSmallObject
{ string testB; }
现在,而不是使用测试类无处不在,我需要使用一个派生类测试中,我们姑且称之为类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();
}
}
但问题是,我不能再投从那些subSmallObjectA或subSmallObjectB的subSmallObject回报,由于TOT手头的任务,他要求(这将打破了许多我无法控制的东西,那些东西需要smallSubObjectA或subSmallObjectB)。 subSmallObjectA和subSmallObjectB之间会有共享元素。我不想消除虚函数,因为如果有两个单独的方法,则会重复一些代码。
有没有我失踪的模式或任何实践?我在这方面有点失落,这种架构变化超出了我的想法,因为我不知道“正确”的方式来做到这一点。
答
不能投出方法调用的结果是......很奇怪。 如果你绝对不能,你可以尝试一个通用的工厂方法:
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没有默认的构造函数,它不会工作。