1.基本概念
公式:共分散との両方の観点から、前者が誘導体よりも大きいタイプ由来の最初に指定程度の使用を意味する(具体的に)派生型の元の起源を特定するために使用することができるよりも小さな程度を意味し、入力(以下特定)タイプ。[MSDN]
公式:
共分散:IFoo <親> = IFoo <サブクラス>。
インバータ:IBAR <サブクラス> = IBAR <親>。
一時的にあなたが読んで、それは問題ではありません理解していません。
2.共変(共分散)
1)outキーワード
ジェネリック型パラメータの場合、out
キーワードは、パラメータの型が共変で指定することができます。 あなたには、汎用のインターフェイスとデリゲートを使用することができます out
キーワード。[MSDN]
2)魯迅は:百聞は一見にしかずである(図は不明過小評価し、スタンドアローンのマウスの右ボタンを- > [新しいタブで画像を開きます)
注意:一般的なデリゲート原理を上昇させることは同じです。
3)共変とは何ですか?
出力キャストメンバーを実施する特定のパラメータ、および変換のタイプのためのガイドラインをランプアップすること「である置換原則リヒター。」
3.インバータ(Contravariance)
1)キーワードで
ジェネリック型パラメータの場合は、in
キーワードのパラメータは、インバータの種類を指定します。 あなたには、汎用のインターフェイスとデリゲートを使用することができます in
キーワード。[MSDN]
2)魯迅は:百聞は一見にしかずである(図は不明過小評価し、スタンドアローンのマウスの右ボタンを- > [新しいタブで画像を開きます)
3)インバータとは何ですか?
インバータはあるキャストメンバーを実施する特定の入力パラメータ、および変換のタイプのためのガイドラインである「原則リヒター置換します。」
4.質問と答え
1)共分散、なぜ唯一のジェネリックインターフェイスまたはデリゲートに対してインバータ?しかし、ではない一般的なクラスのために?
彼らは(インターフェースが定義されたフィールドであることはできない)だけであるため、この方法は、メンバーを定義し、方法のメンバーがオブジェクトを作成するときには、オブジェクトのメモリ割り当てに関連していない、彼らは、タイプ(メモリ)セキュリティです。
なぜジェネリック医薬品のために?ジェネリッククラスはテンプレートクラスで、クラスメンバーがフィールドに含まれているため、オブジェクトのメモリの割り当てに影響を与える分野の異なる種類は、関係のない派生型が、彼らは互換性がありませんませんが、またメモリ安全ではありません。
2)共分散、なぜインバータは、タイプセーフなのですか?
基本的にリヒター置換原則、原理は見リヒターによって置き換えられます。小さな範囲が大きく派生サブセットを得ているので、親クラスのサブクラスの場所は、プログラム全体の機能は変わりません交換します。
3)公式 インバータが今読むことができるかどうかを共分散の定義は、?
上記を読んで、正式な定義は確かに問題ではありません。誘導された小さな程度は基底クラスとして理解することができ、深さが制限された継承チェーンではないので、大部分は、なぜこの言葉のような程度で、サブクラスまたは派生クラスとして理解することができる導き出します。