7

私は現在、C#の共変性と反変性について読んでいます。

すべての例には、変換可能なオブジェクトの詳細があり、インターフェイスの実装とは正確であるために異なります。

どこCircle : IShape

共変性:SomeType<Circle> as SomeType<IShape>
反変性:SomeType<IShape> as SomeType<Circle>


それぞれが他のタイプに変換するように書かれてTypeAいるが、共通のインターフェースを実装していない場合でも、これらのタイプのジェネリックの変換を扱うときに共分散/反変性について話すのは正しいですか?それともこれは別の概念ですか?TypeBimplicit converter

4

2 に答える 2

2

別の概念。outある意味での共分散(またはを介した反変性in)は常に参照を保持し、変換はまったくありません-他の(証明可能な)用語での同じ参照です。これは、ボックスが参照を保持しないため、インターフェイスを実装する構造体に適用されない理由でもあります。同じ参照保存ロジックが、参照型の配列の共変割り当てに適用されます。

于 2011-07-19T15:07:50.170 に答える
1

型は、共/反変であるために共通のインターフェースを実装する必要はありません。

これらの用語は、変換によって情報が失われるのか、情報が増える可能性があるのか​​を示しています。これは、継承されたオブジェクトに適用された場合と、doubleおよびfloatに適用された場合と同じように関連します。

そうです、暗黙のコンバーターがある限り、共通のインターフェースを持たないオブジェクトについて話すときは、共分散/逆分散について話すのは正しいです。

于 2011-07-19T15:07:57.240 に答える