我只想强调其他人给出的答案。
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.