この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 20054|答える: 0

[出典] C#の高度な概念を素早く理解する(1) 代理委任

[リンクをコピー]
掲載地 2017/01/19 15:18:00 | | | |
私は長い間.NET開発をしていて、最近『C# Advanced Programming』という本をレビューしました。 かつては理解しているように思えたけれど理解できなかった多くの問題が、実はゆっくりと研究し理解できることを発見しました。

そこで、「C#アドバンストプログラミングシリーズ」についてブログ記事を書き始める予定です。 この本は「C# Advanced Programming」という本の概念を取り入れ、他の専門家のブログ記事にも言及しますので、ご理解いただければ幸いです。 もし何か問題があれば、ぜひ訂正してください。

(また:このブログ記事では定義や文法の基本は説明しません。) )



就役について話しましょう。

Delegateは.NETで広く使われています。 ラムダ式、イベント、匿名性手法などが関わります(続報のブログ記事にご期待ください)。

では、委任とは何でしょうか?

一般的に言えば、代理者はメソッドを指定するのと何ら変わりませんが、代理者キーワードを指定し、メソッドの実体を持たない点が異なります。 例えば、何に取り組むか分からないままコードを書くとき、これは仮の存在と考えることができます。 導入するパラメータ型と出力型を知り、それを定義すればいいだけです。 これは本で伝えられている方法であり、署名は同じ意味でなければならないということです。

基本的な委任を定義しましょう。





実行結果:
上記の実用的な場所を信頼できると思いますか? つまりデリゲートは、同じ取り込みパラメータのタイプとリターンタイプの任意のメソッド、あるいは同じシグネチャを持つメソッドキューを実行できます。

では、メソッドのシグネチャ(インポートと出力パラメータ)は本当にデリゲートと全く同じでなければならないのでしょうか? 回答:いいえ、共分散と逆変動を無視することはできません。
共変と反転子の知識を簡単に紹介しましょう。

「共分散」とは、元々指定された導出型よりも導出型を使用できることを意味します。
「インバーター」とは、より低い派生の型を使用できる能力を指します。
さらに、私たちの委同一派閥は共分散と逆にも従属します。

つまり、代理が定義されていれば、まったく同じ署名メソッドだけでなく、その代理変数に値を割り当てられることになります。
もしメソッドのパラメータテーブルがデレゲート宣言と一致しているが、の派生クラスを返す場合(デレゲート宣言が型を返す)、そのメソッドもこのデリゲート変数に割り当てることができます。
メソッドのリターン型がデリゲートの宣言と一致しているが、引数がデレゲート宣言パラメータ型の祖先クラスであれば、そのメソッドはデリゲート変数にも割り当てることができます。
メソッドのパラメータと返りのタイプが上記の2行の仮定に一致していれば、そのメソッドはデリゲート変数にも割り当てることができます。

以下は共変対インバータの簡単な例です:

共分散:

インバーター:







先の:MFC設計
次に:どのプロセスがファイルを占有しているかを知る方法
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com