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); }
}
我得到一個編譯器警告:Type parameter 'T' has the same name as the type parameter from outer type '...'
類型參數「T」具有相同的名稱從外類型的類型參數「...」
我想這樣做:void IFoobar.Foo<U>(int x) { Foo(x); }
,但我就不能保證U和T是一樣的。 Foobar課程的實施方式非常重要,它們是相同的。
我也試過:void IFoobar.Foo<U>(int x) where U : T { Foo(x); }
,但不能保證U和T是相等的,它不允許我重新定義約束,因爲它是在接口上定義的。
你想要做什麼?如果在課堂上指定了T,爲什麼要重新定義T?如果你需要定義它,那麼它應該是分開的,否則T已經被類指定了。如果你想解決這個問題,如果可以的話,把T放在界面上。當我發現自己複製了類型規格時,這就是我所做的。 –