I Think it would be more clearer with this example. We Want to see two methods with diferrent parameters in the processor class. "int Process (int value);" "double Process (double value);"
But compiler says for IRoot : 'Generics.IRoot' cannot implement both 'Generics.IProcess' and 'Generics.IProcess' because they may unify for some type parameter substitutions.
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>
{
}