汎用の分散クライアントまで、フルのC#4.0
-
18-09-2019 - |
質問
汎用の分散クライアントまで、フルのC#4.0実施しているようで、次のように書きな例外であるかというクライアントまで、フルのC#3.0):
List<int> intList = new List<int>();
List<object> objectList = intList;
[設定例研究は、そのプロセスの基礎:見Jon Skeetの回答]
最近、私は、出席した会議がJon Skeetたので紹介しており汎用の分散がなんなのかん完全にできるのではないかと考えていことの意義を理解した上で、 in
や out
キーワードでゆと共分散が思うコンプライアンス-
どのようなCLRがこのコードを実行? では暗黙的に変換する List<int>
へ List<object>
それとも単に構築ができるようになってきたの間の変換に派生型への親か。
の利息、なぜかこの導入以前のバージョンなどの主要利益-ie実世界の?
詳細情報はこ ポスト ジェネリックの分散が問題は非常に時代遅れ、実際に最新情報
解決
い例ではな作業のために
- 授業など
List<T>
は不変量;みの代表者とインターフェイス変異体 - のための分散、ユーザーインターフェースにのみ利用型のパラメータが一方向にcontravariance、共分散)
- 値の種類な支援を受けることとなりまし型の引数のための分散もありませんconverstionから
IEnumerable<int>
へIEnumerable<object>
例えば、
(コードがコンパイル両方のC#3.0 4.0-あの例外ではありません。)
この う 作品:
IEnumerable<string> strings = new List<string>();
IEnumerable<object> objects = strings;
のCLR使用して、照会、変更な新たなオブジェクトが作成されます。だという objects.GetType()
だなも List<string>
.
ると思うんで紹介したことなどにより、前言語のデザイナーだったりをどのようなもので、CLR年.phpがv2で増えたファイルです。
の特典と同じその他の場にしたい利用できるように一種類しています。同じ例を使って最終土曜日だったものを実装し IComparer<Shape>
比較形状によるもの狂いは使用できなくなることに並べ替え List<Circle>
が比較できる任意の形状できるかを比較しに二人でいる。としてのC#4であっきcontravariantからの転換 IComparer<Shape>
へ IComparer<Circle>
でき circles.Sort(areaComparer)
.
他のヒント
数追加の思いを語りました。
どのようなCLRることができるこのコードが実行され
としてのJonており、その他の正しくないって分散授業、インターフェースとします。そこでの例では、CLRは何;このコードなコンパイル。までコンパイルに挿入しなかぶりでクラッシュ実行時だけでなくキャストします。
今りのさるとしあきだいえっと合理的な疑問をお願いいか分散作品の裏です。その答えは:これを制限するこの参照型の引数をparameterize面処理を委譲するのはよう なし がコンプライアンス-という時に
object x = "hello";
その裏方には、参照の文字列は、こだわった、変数の型オブジェクト 変更の有無に関わらず.のビットに合わせて作られた"アプリへの参照を文字列はビットするオブジェクトに対する参照ので、なんともニーズ起こります。のCLRけ止め方にビットを参考にして文字列の開始を考えてつオブジェクトです。
きっ
IEnumerator<string> e1 = whatever;
IEnumerator<object> e2 = e1;
おいしかったです。何も起こりません。のビットが参考にする文字列の列挙子と同じであるビットの作りへの参照オブジェクトの列挙子.が少しマジックができなキャストと言う:
IEnumerator<string> e1 = whatever;
IEnumerator<object> e2 = (IEnumerator<object>)(object)e1;
現在、CLRを生み出することをチェックするe1実際には実施するインターフェイス、チェックインはスマートいとの認識の差異.
その理由をきく異な界面がきれいだな-opに変換する ので 通常の代入互換性のあることができてうれしいです。あけましておめでとうございまへの利用e2のですか?
object z = e2.Current;
このビットを返しますことへの参照を文字列になります。今既に確立されることに対応オブジェクトです。
なぜなこ導入しょうか。またその他の特徴は、予約-支払い可能です。
その原則性に対する効果の検証である。この変換から配列の文字列配列のオブジェクト"けいたします。
の利息、なぜかこ 導入以前のバージョン
最初のバージョン1.x)です。当期純なジェネリック医薬品で、汎用の分散ます。
なおすべてのバージョンです。純あり、配列の分散共分散.残念ながら、安全でない共分散:
Apple[] apples = new [] { apple1, apple2 };
Fruit[] fruit = apples;
fruit[1] = new Orange(); // Oh snap! Runtime exception! Can't store an orange in an array of apples!
はやゆ-分散クライアントまで、フルのC#4の安全を防ぐことになる。
何の利益-ie実 世界?
多くのコードは、呼び出しAPIを期待する増幅型のベースなど IEnumerable<Base>
)がんで増幅型の由来など IEnumerable<Derived>
).
クライアントまで、フルのC#2、C#3のために手動で変換する IEnumerable<Base>
, もので"だいたします。共に堅調に分散で"だいたします。
p.s.全く吸い込みるSkeetの答えは食事のすべての私repます。気まSkeet!:-)のように見えた の答えは前, れています。