ホームページ >バックエンド開発 >C#.Net チュートリアル >委任とは何ですか? .net における重要な機能委任の概要

委任とは何ですか? .net における重要な機能委任の概要

零下一度
零下一度オリジナル
2017-06-24 09:41:002981ブラウズ

委任は .net の非常に重要な機能です。.net 1.x バージョンから組み込まれていますが、多くの学生はそれをあまり明確に理解していません (私も含めて、理解していますが)。長年にわたって開発されてきたため、デリゲートは多くの場所で無意識に使用されている可能性がありますが、まだあまり明確ではありません)。そこで、一連の記事を作成してデリゲートについての印象を要約し、深めることにします。

デリゲートとは

は、次の 2 つの点に要約できます:

1. 最も一般的な理解は、安全な「関数ポインター」です。

2. 基本的に、デリゲートはクラスであり (以下に示すように IL によって証明できます)、デリゲートには同じメソッド シグネチャと同じ戻り値を持つ複数のメソッドが含まれます。

委任のクラス図:

上の図からいくつかの情報を得ることができます。 1. 委任はクラスです。 2. デリゲートは System.MulticastDelegate 型を継承します。

なぜ委任を使用する必要があるのか​​

もっと一般的なステートメントは、委任を使用することでどのような利点がもたらされるかというものです。

以下は、委任を使用する利点を示す小さな例です。要件は、名前を入力すると、コンソールに中国語と英語の挨拶がそれぞれ出力されることです。

委任を使用しない場合:

 1 namespace DelegateDemo 2 { 3     class Program 4     { 5         static void Main(string[] args) 6         { 7             //通过输入的name,控制台分别打印中文和英文的问候语 8             Hello("麦子", Language.Chinese); 9             Hello("mcgrady", Language.English);10 11             Console.ReadKey();12         }13 14         /// <summary>15         /// 问候16         /// </summary>17         /// <param name="name"></param>18         /// <param name="lang"></param>19         private static void Hello(string name, Language lang)20         {21             if (lang == Language.Chinese)22             {23                 ChineseHello(name);24             }25             if (lang == Language.English)26             {27                 EnglishHello(name);28             }29         }30 31         /// <summary>32         /// 中文问候33         /// </summary>34         /// <param name="name"></param>35         private static void ChineseHello(string name)36         {37             Console.WriteLine(string.Format("你好,{0}", name));38         }39 40         /// <summary>41         /// 英文问候42         /// </summary>43         /// <param name="name"></param>44         private static void EnglishHello(string name)45         {46             Console.WriteLine(string.Format("hello,{0}", name));47         }48 49     }50 51     /// <summary>52     /// 语言类型53     /// </summary>54     public enum Language55     {56         English,57         Chinese58     }59 }

委任を使用しない場合は、列挙言語を使用して中国語の挨拶を使用するか英語の挨拶を使用するかを示す必要があり、また、...else かどうかを判断する必要もあります。 .. .

メソッドを直接渡すことができる場合は、はるかに簡単になる可能性があります。見てみましょう。

委任を使用します:

 1 namespace DelegateDemo 2 { 3     //声明委托 4     delegate void MyDel(string name); 5  6     class Program 7     { 8         static void Main(string[] args) 9         {10             //通过输入的name,控制台分别打印中文和英文的问候语11             Hello("麦子", ChineseHello);12             Hello("mcgrady", EnglishHello);13 14             Console.ReadKey();15         }16 17         /// <summary>18         /// 问候19         /// </summary>20         /// <param name="name"></param>21         /// <param name="myDel"></param>22         private static void Hello(string name, MyDel myDel)23         {24             myDel(name);25         }26 27         /// <summary>28         /// 中文问候29         /// </summary>30         /// <param name="name"></param>31         private static void ChineseHello(string name)32         {33             Console.WriteLine(string.Format("你好,{0}", name));34         }35 36         /// <summary>37         /// 英文问候38         /// </summary>39         /// <param name="name"></param>40         private static void EnglishHello(string name)41         {42             Console.WriteLine(string.Format("hello,{0}", name));43         }44 45     }46 }

要約すると、委任の主な利点は次のとおりです:

1. if...else...or switch を大幅に節約します。 .. 判断により、プログラムはよりオブジェクト指向になります。

2. 切り離しによりプログラムの拡張が容易になります。例: Tracy.Proxy インターフェイス プロキシ コンポーネントは、XML ログとパフォーマンス ログを記録します。

もちろん、これは委任を使用する利点を説明するための単なる例です。実際、委任は winform や Webform のボタン クリック イベント、Linq の Func および Action 委任など、さまざまな場所で使用されます。

委任されたアプリケーションのシナリオ

1、winform と webform のボタン クリック イベント。

2、Linq の Func デリゲートと Action デリゲート。

3、Tracy.Proxy インターフェイス プロキシ コンポーネント

XMind を使用して要約します:

以上が委任とは何ですか? .net における重要な機能委任の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。