ホームページ > バックエンド開発 > C++ > C# インターフェイスの共分散と反変性とは何ですか?また、それらはどのように機能しますか?

C# インターフェイスの共分散と反変性とは何ですか?また、それらはどのように機能しますか?

Barbara Streisand
リリース: 2025-01-21 15:27:11
オリジナル
958 人が閲覧しました

What are Covariance and Contravariance in C# Interfaces, and How Do They Work?

C# の共変インターフェイスと反変インターフェイスについて詳しく説明します

C# を学習する過程で、多くのプログラマは共変インターフェイスや反変インターフェイスに遭遇しますが、その重要性を理解するのは難しい場合があります。この記事は、これらの概念とその実際の応用を明確かつ簡潔に説明することを目的としています。

共分散と反分散の詳しい説明

C# では、インターフェイスはクラスと構造体が従う必要がある規約を定義します。共分散と反分散は、インターフェイスがジェネリック型を処理する方法を変更し、柔軟性を高めます。

  • 共変: 共変インターフェイスでは、ジェネリック型パラメーターは out T で宣言されます。これは、インターフェイスのインスタンスが、階層内の上位タイプのオブジェクトを参照していると見なすことができることを意味します。簡単に言えば、インターフェイスに共変ジェネリック型がある場合、派生クラス オブジェクトを基本クラス型の変数に格納できるようになります。
  • 反変: 反変インターフェースでは、ジェネリック型パラメーターは in T で宣言されます。これは、インターフェイスのインスタンスが、階層内の下位タイプのオブジェクトを参照していると見なすことができることを意味します。繰り返しますが、これにより、基本クラスのオブジェクトを派生クラス型の変数に格納できるようになります。

共分散と反分散の応用

共分散と反分散は、さまざまな実際的なシナリオをサポートします。

  • 共分散:

    • 基本クラス オブジェクトのコレクションからデータを取得したり、派生クラス オブジェクトが存在する場合はそれを返すことができます。
    • 型の安全性を確保し、無効なオブジェクトがコレクションに追加されるのを防ぎます。
  • 反転:

    • 基本クラスのオブジェクトを期待するメソッドに、派生クラスのオブジェクトをパラメーターとして渡すことができます。
    • 複数の派生クラスに対応することにより、柔軟性とコードの再利用が可能になります。

共変および反変のインターフェイスの例

次の例を考えてみましょう:

<code class="language-csharp">interface IAnimal { string Name { get; } }
interface IFish : IAnimal { }

// 协变接口
interface IAnimalsContainer<out T> where T : IAnimal { }

// 逆变接口
interface IHelper<in T> where T : IAnimal { void Help(T obj); }

class Fish : IFish { public string Name => "Guppy"; }</code>
ログイン後にコピー

共分散を使用すると、IAnimalsContainer<IAnimal> インターフェイスを使用して IFish オブジェクトを保存できます。反変性を使用すると、IHelper<IAnimal> インターフェイスを使用して、IFish パラメーターを受け入れるメソッドに IAnimal オブジェクトを渡すことができます。

結論

C# の共変インターフェイスと反変インターフェイスは、型の安全性とコードの柔軟性を強化できる強力なツールです。これらがどのように機能するかを理解することで、プログラマはその利点を活用し、より効率的で保守しやすいコードを作成できるようになります。

以上がC# インターフェイスの共分散と反変性とは何ですか?また、それらはどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート