【问题标题】:Inheritance and functions with different return types具有不同返回类型的继承和函数
【发布时间】:2016-09-13 22:04:51
【问题描述】:

我有以下类设置如下:

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 之间会有共享元素。我不想去掉虚函数,因为如果有两个单独的方法,有些代码会重复。

有没有我遗漏的模式或练习?我对此有点迷茫,这样的架构变化超出了我的范围,因为我真的不知道“正确”的方式来做到这一点。

【问题讨论】:

    标签: c# inheritance polymorphism overriding virtual


    【解决方案1】:

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

    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 没有默认构造函数,它将无法工作。

    【讨论】:

      猜你喜欢
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多