Foo其中T : BaseObject和Foo之间的区别
本文关键字:BaseObject Foo 区别 之间 其中 | 更新日期: 2023-09-27 18:34:12
两者有什么区别
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的T
成员访问BaseObject成员。 With Foo<T> where T : BaseObject
,Foo的消费者将可以访问任何派生类型的所有成员,无论实际传递给类型参数。