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 のメンバーから BaseObject メンバーにのみアクセスできますTWith Foo<T> where T : BaseObject、Foo のコンシューマーは、型引数に実際に渡された派生型のすべてのメンバーにアクセスできます。

于 2012-05-13T19:19:14.987 に答える