では、型が共変または反変であるとはどういう意味でしょうか? 分散は型の射影のプロパティであり、型自体のプロパティではありませんか?
はい、あなたはスポットです。まあ、あなたはほとんどスポットです。分散は、型の特定の関係に関する型の射影のプロパティです。
次のステートメントを検討してください。
4番目のものと言います。最初のものを意味します。「共変である」とは、射影が (からへ) 何であり、保存された関係が (代入の互換性) であるIEnumerable<T>
かが文脈から明らかであることを前提としています。そのように言う方が簡単です。T
IEnumerable<T>
あなたが言及した記事では、私は最初はこれよりもずさんです。基本的に「共変」は、「共変変換に何らかの形で関与できる」という意味で使用します。ただし、「共変的に有効」などの定義は正確です。それを「共変的に有効」と呼ぶと理解しにくくなる場合は、別の呼び方をしてください。
型 X は、ポインター、非ジェネリック、Frobby 要素型の配列、またはすべての "in" 型引数が Blobby であり、すべての "out" 型引数が Frobby であるジェネリック型である場合、Frobby 型であると言われます。 、および他のすべての型引数は Frobby と Blobby の両方です。ポインター、非ジェネリック、Blobby 要素型の配列、またはすべての "in" 型引数が Frobby で、すべての "out" 型引数が Blobby であり、すべての型引数が Blobby であるジェネリック型である場合、Blobby と呼ばれます。他の型引数は Frobby と Blobby の両方です。
そこでは、「共変」または「反変」という言葉をまったく使用せず、Frobby と Blobby の両方を正確に定義しています。
I<out T, in U>
ジェネリック型が共変でT
あり、反変であるとはどういう意味U
ですか?
繰り返しますが、これは単なる短い形式です。最初の部分は、すべての fixedU
の場合、参照型T
から へI<T, U>
の射影が、割り当て方向の互換性を保持する射影であることを意味します。X
が と代入互換性がY
あり、Z
が任意の型である場合、はI<X, Z>
と代入互換性がありI<Y, Z>
ます。
反変部分についても同様ですが、現在T
は固定されており、射影は関係の方向を逆にしています。
また、「反変の妥当性はバリアントの妥当性の方向を逆転させる」とはどういう意味ですか?
つまり、共変妥当性のルールを読んで、反変妥当性のルールと比較すると、一連のルールが「逆になっている」だけで、ルールは基本的に同じであることがわかります。そのため、これを *コントラ* バリアンスと呼びます。
私のブログには分散に関する記事が 12 以上あります。このテーマに興味がある場合は、最初から読み始めることをお勧めします。