我设置了以下类:
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之间将有共享元素。我不想消除虚函数,因为如果有两种不同的方法,一些代码将被重复。
那里有任何我失踪的模式或任何练习吗?我对此有点失落,这样的架构变化超出了我的范围,因为我并不真正了解"正确的"这样做的方式。
答案 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没有默认的构造函数,它就无法工作。