Foo <t>之间的区别,其中T:BaseObject和Foo <baseobject> </baseobject> </t>

时间:2012-05-13 18:53:23

标签: c# generics

之间有什么区别
Foo<T> where T : BaseObject

Foo<BaseObject>

这句话不一样吗?

2 个答案:

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