和有什么区别
Foo<T> where T : BaseObject
和
Foo<BaseObject>
这个说法不一样吗?
不,不一样。
和:
Foo<T> where T : BaseObject
T
可以是任何BaseObject
类型及其继承者。
和:
Foo<BaseObject>
T
必须完全BaseObject
正确(假设没有Foo
为泛型类型参数声明方差修饰符)。
考虑一下:
var list = new List<object>();
list.Add("Hello");
Console.WriteLine(list[0].Length); // doesn't compile
同样,使用Foo<BaseObject>
Foo 的消费者将只能从 Foo 的成员访问 BaseObjectT
成员。 With Foo<T> where T : BaseObject
, Foo 的消费者将可以访问实际上为类型参数传递的任何派生类型的所有成员。