ホームページ > バックエンド開発 > C++ > .NET ジェネリックスの共分散、反分散、および「in」/「out」キーワードとは何ですか?

.NET ジェネリックスの共分散、反分散、および「in」/「out」キーワードとは何ですか?

Mary-Kate Olsen
リリース: 2025-01-20 17:27:09
オリジナル
496 人が閲覧しました

What are Covariance, Contravariance, and the

.NET ジェネリックにおける共分散、反分散、および "in/out" の詳細な説明

共分散と反分散は、.NET の汎用インターフェイスとデリゲートの設計において重要な役割を果たします。これらは、さまざまなシナリオでジェネリック型を安全に置き換える方法を決定します。

共分散と反分散

共分散により、プリミティブ型が単なる「戻り値」(戻り値など)である場合に限り、プリミティブ型の代わりに、より「派生した」(より具体的な)型を使用できます。対照的に、反変性では、元の型が「入力」としてのみ (たとえば、メソッド パラメーターとして) 使用される場合に限り、元の型の代わりに、より「基本的な」(具体性が低い) 型を使用できます。

「イン」と「アウト」

「in」キーワードと「out」キーワードは、それぞれ共分散と反変性の略語です。ジェネリック型が戻り値としてのみ現れる場合は「out」を使用し、ジェネリック型がメソッドのパラメーターとしてのみ現れる場合は「in」を使用します。

関係の明確化

List を List として扱うことができないことに関する記事の例は、反変性の概念を示しています。より具体的な (派生) 型に書き込むということは、書き込まれるデータの型がより具体的である必要があるため、「in」制約 (反変) を使用することを意味します。

汎用インターフェースの使用に関する詳細な説明

共分散と反分散をより深く理解するには、次の 2 つの一般的な方法を検討してください。

<code>public Base DoSomething(int variable)
public Derived DoSomethingElse(int variable)</code>
ログイン後にコピー

インターフェース MyInterface には、T を返すメソッド MyFunction(int variable) があるとします。

  • T を変更するには「out」を使用します。interface MyInterface<out T> は、T が戻り値の型としてのみ使用できることを示します。 Derived は Base からの派生型であるため、MyInterface への MyInterface の割り当ては有効です。
  • T を変更するには「in」を使用します。interface MyInterface<in T> は、T がメソッド パラメーターとしてのみ使用できることを示します。 MyInterface への MyInterface の割り当ては、反変ルールに違反するため無効です。

概要

共分散、反分散、および「in/out」の概念を理解することは、.NET でジェネリックスを効果的に使用するために重要です。ジェネリック型がその使用法に基づいて正しく置き換えられるようにすることで、タイプセーフなコードを作成できます。

以上が.NET ジェネリックスの共分散、反分散、および「in」/「out」キーワードとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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