public interface IHasFeature<TFeature> {
TFeature Feature { get; set; }
}
public class FeatureOne {
/*...*/
}
public class ProductOne : IHasFeature<FeatureOne> {
public FeatureOne Feature { get; set; }
}
public abstract class BaseContainer<TProduct, TFeature>
where TProduct : IHasFeature<TFeature> {
public TProduct Product { get; set; }
public void DoProcess() {
var result = Product.Feature.Execute(); //Execute is an extension method
}
}
public class MyContainer : BaseContainer<ProductOne, FeatureOne> {
/*...*/
}
我的工作:
MyContainer : BaseContainer<ProductOne, FeatureOne>
但我想:
MyContainer : BaseContainer<ProductOne>
ProductOne : IHasFeature<...>
应该已经包含嵌套的通用功能TFeature
,我不想在MyContainer
构造中再次重复它们。
知道如何改善这个吗?感谢。
EDIT2 -----------------------
删除了新关键字,Nenad说这是错误的。
答案 0 :(得分:0)
编译将您对扩展方法Execute()
的调用转换为对定义它的类的静态方法的调用。因此,当您在Product.Feature.Execute()
内调用DoProcess()
时,编译器需要知道Product.Feature
的类型才能调用相应的扩展方法。
我建议写这样的IHasFeature
public interface IHasFeature
{
void DoSomethingWithFeature();
}
如果您想保持IHasFeature
通用,那么您可以做的最好的事情是定义BaseContainer
而不指定TFeature
并在DoProcess()
中实施MyContainer
。
public abstract class BaseContainer<TProduct>
{
public TProduct Product { get; set; }
public abstract void DoProcess();
}
public class MyContainer : BaseContainer<ProductOne>
{
public override void DoProcess()
{
Product.Feature.Execute();
}
}