2011-07-19 12 views
7

私は現在、共分散とContravariance C#で読んでいます。共通のインタフェースを実装していない暗黙的に変換可能な型に共分散/反分散が適用されますか?

すべての例は、オブジェクトが変換可能であることの詳細を持っており、Interface実装の精度のために異なります。

どこCircle : IShape

共分散:SomeType<Circle> as SomeType<IShape>
Contravariance:SomeType<IShape> as SomeType<Circle>


TypeATypeBそれぞれが他の型に変換するために書かれimplicit converterを持っていますが、は、任意の共通インタフェースを実装しない場合、それらのジェネリック医薬品の変換を扱う際に共分散/反動について話すのは正しいですか? eタイプ?それとも別のコンセプトですか?

答えて

2

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

+0

この概念の名前はありますか?別のタイプの一般的な分散ですか? – StuperUser

1

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

この用語は、変換によって情報が失われるか、情報が増加する可能性があるかどうかを示しています。これは、継承されたオブジェクトに適用されるときと同じように、倍精度浮動小数点数に適用されるときと同じです。

したがって、暗黙のコンバータが存在する限り、共通のインターフェイスを持たないオブジェクトについて話すときは、コモ/コントラバリエーションについて話すのは正しいです。

関連する問題