我只想强调其他人给出的答案。
Test(IFoo foo)和之间有区别Test<T>(T foo) where T : IFoo。有一个真正的区别,就像List<object>(或者,比如说ArrayList,它接收一个object)和List<string>.
Test (IFoo foo), 为您提供多态性和类型继承的好处,就像List<object>. 它允许您构建一个处理所有IFoo类型的类。但有时我不只是想要多态性,我想要一个只能保存字符串的列表——并且List<string>不需要我在ArrayList.
你的代码也一样。假设我有一个class Comparer<T> where T:IFoo. 我希望能够使用这个类来Foo1相互比较对象,或者相互比较Foo2,但我不希望能够Foo1与Foo2. 强类型泛型方法将强制执行此操作,而多态方法则不会:
public class Comparer
{
public bool Compare1<T>(T first, T second) where T : IFoo {...}
public bool Compare2 (IFoo first, IFoo second) {...}
}
Foo1 first = new Foo1();
Foo2 second = new Foo2();
myComparer.Compare1(first, second); // won't compile!
myComparer.Compare2(first, second); // Compiles and runs.