共分散と反分散: 実際の応用
実際のシナリオに共分散と反分散を実装すると、コードの柔軟性と再利用性が向上します。簡略化した例を次に示します:
共変:
共変インターフェイスは、派生型をより少ない派生型に割り当てることを可能にする出力パラメーターを定義します。例:
<code class="language-c#">public interface ICovariant<out T> { } public class Covariant<T> : ICovariant<T> { } public class Fruit { } public class Apple : Fruit { }</code>
ここで、Apple は Fruit のサブタイプであるため、ICovariant<Fruit>
を ICovariant<Apple>
に割り当てることができます。共分散を使用すると、キャストせずにさまざまなタイプのデータを保存できるため、コードがより簡潔で多用途になります。
I反変:
反変インターフェイスは入力パラメーターを定義し、より派生度の低い型をより多くの派生型に割り当てることができます。例:
<code class="language-c#">public interface IContravariant<in T> { } public class Contravariant<T> : IContravariant<T> { }</code>Fruit は Apple のスーパータイプであるため、
IContravariant<Apple>
を IContravariant<Fruit>
に割り当てることができます。反変性により、一貫した動作を確保しながら、さまざまなタイプの入力パラメーターを受け入れることができます。
例:
次のコードは、共分散と反分散の使用を示しています。
<code class="language-c#">public class TheInsAndOuts { public void Covariance() { ICovariant<Fruit> fruit = new Covariant<Fruit>(); ICovariant<Apple> apple = new Covariant<Apple>(); Covariance(fruit); Covariance(apple); // 通过协变允许从 Apple 向 Fruit 上转型 } public void Contravariance() { IContravariant<Fruit> fruit = new Contravariant<Fruit>(); IContravariant<Apple> apple = new Contravariant<Apple>(); Contravariant(fruit); // 通过逆变允许从 Fruit 向 Apple 下转型 Contravariant(apple); } public void Covariant(ICovariant<Fruit> fruit) { } public void Contravariant(IContravariant<Apple> apple) { } }</code>
概要:
共分散と反分散により、開発者は互換性のある型の割り当てを可能にすることで、柔軟で再利用可能なコードを作成できます。これらは継承の機能を拡張し、異なるタイプのオブジェクト間でのデータ処理とパラメータの受け渡しを容易にします。
以上が共分散と反分散はコードの柔軟性と再利用性をどのように強化しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。