之间有什么区别
Foo<T> where T : BaseObject
和
Foo<BaseObject>
这句话不一样吗?
答案 0 :(得分:7)
不,它不一样。
使用:
Foo<T> where T : BaseObject
T
可以是任何BaseObject
类型及其继承者。
使用:
Foo<BaseObject>
T
必须完全为BaseObject
(假设在Foo
中没有为泛型类型参数声明方差修饰符)。
答案 1 :(得分:0)
考虑一下:
var list = new List<object>();
list.Add("Hello");
Console.WriteLine(list[0].Length); // doesn't compile
类似地,对于Foo<BaseObject>
,Foo的使用者只能访问Foo的T
成员中的BaseObject成员。 With Foo<T> where T : BaseObject
,Foo的消费者可以访问实际为类型参数传递的任何派生类型的所有成员。