2009-05-31 11 views

答えて

11

安全共/ contra-varianceを紹介します。 IEnumerable<T>のみ出力位置におけるTIComparable<T>のみ入力位置でTを有するを有しているIList<T>ICollection<T>は、入力及び出力位置にTの両方を有します。

IList<T>サポートされているタイプの分散を仮定します

static void FailingMethod(IList<object> list) { 
    list[0] = 5; 
} 

static void Test() { 
    var a = new List<string>(); 
    a[0] = "hello"; 
    FailingMethod(a); // if it was variant, this method call would be unsafe 
} 
+0

感謝を!インデクサーを使用しているように見えるので、どのクラスも非バリアントになります。 しかしICollection <>は入力パラメータにTしかありません。 – UserControl

+0

いいえ、一般的なインデクサーとは関係ありません。他のメソッドやプロパティと同様に、インデクサのパラメータと戻り値の型(およびget/setアクセサの存在)によって異なります。あなたは次のようなインデクサーを持つかもしれません:T this [int index] {get {return x [index]; }}}そして、アクセサーが設定されていなければ、それは変種かもしれません。 –

1

アンダースHejlsebergは、「C#3の未来を。」簡潔がありますが、彼の話にコ/ contravarianceを説明し議論を照らします共分散とコントラバリアンスに関する彼の議論は、プレゼンテーションに50分17秒で始まります。

http://channel9.msdn.com/pdc2008/TL16/

関連する問題