如何为基础 class 创建可选类型注入?

How do I create Optional Type injection for a base class?

在常规的敏捷编程技术课程中,我经常做很多重构。如果我发现共同点,他们就是基地 class 的候选对象。假设此代码模式:

public Subclass : BaseClass{
   private dynamic SomeValue = null;
   public Subclass(){
       SomeValue = BaseClass.Method<T>();
   }
}

一切正常,直到我厌倦了不断地将类型注入方法。为什么不将类型注入基 class 呢?但是等一下,我不想重做 20 classes 已经使用上面的这种模式。现在我有两种可以使用的潜在模式,这是第二种。

public Subclass : BaseClass<T>{
   private T SomeValue = null;
   public Subclass(){
       SomeValue = BaseClass.Method();
   }
}

第二个模式可能是第一个示例的逻辑推导,我们只是将类型移动到 class CTOR,而不是在每个方法中使用通用类型。

我想询问社区他们对如何在不更改任何当前代码但添加对泛型类型基础 class 模式的支持的情况下完成这两个构造的想法。

四人组再一次说对了"Favor Composition over inheritance"。在这种情况下,术语 BaseClass 可能不合适,但是您可以通过不真正询问 "is this really a Baseclass?"

来了解我们的基类概念在一开始是错误的
public Subclass {
   private BaseClass bc1 = null;
   private BaseClass<SomeType> bc2 = null;
   private dynamic SomeValue = null;
   public Subclass(){
     //I still have base class operation ability, but now...
     bc2 = new BaseClass<SomeType>();
     SomeValue = bc2.Method();
 }

}