public abstract class EntityBase { ... }
public interface IFoobar
{
void Foo<T>(int x)
where T : EntityBase, new();
}
public interface IFoobar<T>
where T : EntityBase, new()
{
void Foo(int x);
}
public class Foobar<T> : IFoobar, IFoobar<T>
where T : EntityBase, new()
{
public void Foo(int x) { ... }
void IFoobar.Foo<T>(int x) { Foo(x); }
}
Я получаю предупреждение компилятора: Параметр типа «T» имеет то же имя, что и параметр типа из внешнего типа «...»
Я пробовал делать: void IFoobar.Foo (int x) {Foo (x); }
, однако тогда я не могу гарантировать, что U и T одинаковы. Способ реализации класса Foobar, очень важно, чтобы они были одинаковыми.
Я также пробовал сделать: void IFoobar.Foo (int x) where U: T {Foo (x) ; }
, однако это не гарантирует, что U и T равны, и не позволяет мне переопределить ограничение, поскольку оно было определено в интерфейсе.