我有以下類別設置是這樣的:繼承和功能具有不同的返回類型
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之間會有共享元素。我不想消除虛函數,因爲如果有兩個單獨的方法,則會重複一些代碼。
有沒有我失蹤的模式或任何實踐?我在這方面有點失落,這種架構變化超出了我的想法,因爲我不知道「正確」的方式來做到這一點。