> 백엔드 개발 > C#.Net 튜토리얼 > 위임이란 무엇입니까? .net의 중요한 기능 위임 요약

위임이란 무엇입니까? .net의 중요한 기능 위임 요약

零下一度
풀어 주다: 2017-06-24 09:41:00
원래의
2985명이 탐색했습니다.

  위임은 .net 1.x 버전부터 포함된 매우 중요한 기능입니다. 위임은 ​​프로젝트 개발 과정에서 많이 사용되지만 많은 학생들이 이를 명확하게 이해하지 못했습니다. 수년 동안 개발을 해오면서 위임은 여러 곳에서 무의식적으로 사용될 수 있지만 아직 명확하지 않습니다.) 따라서 위임에 대한 인상을 요약하고 심화하기 위해 일련의 기사를 구성하겠습니다.

델리게이트란 무엇인가

는 두 가지로 요약할 수 있습니다:

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 }
로그인 후 복사

위임 사용하지 않을 경우 열거형 언어를 사용하여 중국어 인사말을 사용할지, 영어 인사말을 사용할지 표시하고, 그렇지 않은지도 판단해야 합니다. .. .

메서드를 직접 전달할 수 있으면 훨씬 간단할 수 있습니다.

위임 사용:

 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...또는 스위치를 많이 절약합니다. .. 판단은 프로그램을 더욱 객체 지향적으로 만듭니다.

2. 디커플링을 사용하면 프로그램을 더 쉽게 확장할 수 있습니다. 예: Tracy.Proxy 인터페이스 프록시 구성 요소는 xml 로그 및 성능 로그를 기록합니다.

물론 이는 위임 사용의 이점을 설명하기 위한 예일 뿐입니다. 실제로 위임은 winform 및 webform의 버튼 클릭 이벤트, Linq의 Func 및 Action 위임 등 다양한 곳에서 사용됩니다.

위임된 응용 프로그램 시나리오

1. winform 및 webform의 버튼 클릭 이벤트입니다.

2, Linq의 Func 및 Action 대표.

3, Tracy.Proxy 인터페이스 프록시 구성 요소

XMind를 사용하여 요약:

위 내용은 위임이란 무엇입니까? .net의 중요한 기능 위임 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿