我想用这个例子会更清楚些。我们希望在处理器类中看到两个具有不同参数的方法。
“int进程(int值);”
“双进程(双值);”
但是编译器对iroot说:
“generics.iroot”不能同时实现“generics.iprocess”和“generics.iprocess”,因为它们可能为某些类型参数替换而统一。
public class Processor : IRoot<int, double, int, double>
{
// Here we want 2 methods
public int Process(int item) { }
public double Process(double item) { }
}
public interface IProcess<TResult, TItem>
{
TResult Process(TItem item);
}
public interface IRoot<TR1, TR2, TItem1, TItem2> :
IProcess<TR1, TItem1>,
IProcess<TR2, TItem2>
{
}
最佳答案
您可能会使用这种实现。您将丢失一些通用参数:
public interface IBase<TM, TPkey>
where TM : bType
where TPkey : new ()
{
TM Get(TPkey key);
}
public interface IABase<TPK> : IBase<ConcreteTmA, TPK> {}
public interface IBBase<TPK> : IBase<ConcreteTmB, TPK> {}
public class Root <TPK> :
IABase<TPK>,
IBBase<TPK>
where TM : MType
where TPM : PMType
where TPK : new()
{
ConcreteTmA IABase.Get(TPK key)
{
}
ConcreteTmB IBBase.Get(TPK key)
{
}
}