3

和有什么区别

Foo<T> where T : BaseObject

Foo<BaseObject>

这个说法不一样吗?

4

2 回答 2

7

不,不一样。

和:

Foo<T> where T : BaseObject

T可以是任何BaseObject类型及其继承者。

和:

Foo<BaseObject>

T 必须完全BaseObject正确(假设没有Foo为泛型类型参数声明方差修饰符)。

于 2012-05-13T18:55:27.187 回答
0

考虑一下:

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 的消费者将可以访问实际上为类型参数传递的任何派生类型的所有成员。

于 2012-05-13T19:19:14.987 回答