C# 如何为基类创建可选类型注入?
在使用常规敏捷编程技术的过程中,我经常进行大量重构。如果我发现了一些共同的东西,他们就是基类的候选人。假设此代码模式:C# 如何为基类创建可选类型注入?,c#,generics,C#,Generics,在使用常规敏捷编程技术的过程中,我经常进行大量重构。如果我发现了一些共同的东西,他们就是基类的候选人。假设此代码模式: public Subclass : BaseClass{ private dynamic SomeValue = null; public Subclass(){ SomeValue = BaseClass.Method<T>(); } } 公共子类:基类{ 私有动态SomeValue=null; 公共子类(){ SomeValue
public Subclass : BaseClass{
private dynamic SomeValue = null;
public Subclass(){
SomeValue = BaseClass.Method<T>();
}
}
公共子类:基类{
私有动态SomeValue=null;
公共子类(){
SomeValue=BaseClass.Method();
}
}
一切正常,直到我厌倦了不断地将类型注入方法。为什么不将类型注入基类呢?但是等一下,我不想重做已经使用上述模式的20个类。现在我有两种可能的模式可以使用,这是第二种
public Subclass : BaseClass<T>{
private T SomeValue = null;
public Subclass(){
SomeValue = BaseClass.Method();
}
}
公共子类:基类{
private T SomeValue=null;
公共子类(){
SomeValue=BaseClass.Method();
}
}
第二个模式可能是第一个示例的逻辑派生,在第一个示例中,我们只是将类型移动到类CTOR,而不是在每个方法中使用泛型类型
我想问一下社区,他们对如何在不更改任何当前代码的情况下完成这两种构造,而是添加对泛型类型基类模式的支持的想法。四人帮再一次说得对,“支持组合而不是继承”。在这种情况下,基类这个术语可能不合适,但是你可以看到我们的基类概念在一开始是错误的,因为我们没有真正地问“这真的是基类吗?”
公共子类{
私有基类bc1=null;
私有基类bc2=null;
私有动态SomeValue=null;
公共子类(){
//我仍然有基本的操作能力,但是现在。。。
bc2=新的基类();
SomeValue=bc2.Method();
}
}只要不使用继承,就不必“注入”任何东西。继承不应该用于提取公共代码——这是一种代码气味。它只能用于指定“is-a”关系。使用组合、控制反转和实注入-即将您想要的类的接口传递给构造函数,并使用DI容器来自动化构造process@PanagiotisKanavos谢谢,这正是我想要的答案。
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();
}