让我们进一步了解c#的博大精深

时间:2021-11-11 06:16:09

说起委托,有些刚刚入门c#的人觉得很高大上,没有接触过,但是其实很多人都用过Lambda表达式,实际上Lambda表达式就是一个委托。

关于委托入门有个大神写的很详细:张子阳的博客  C#中的委托和事件 - Part.1 。下面就凭据思明的理解介绍一下委托入门

1、委托是什么

  委托是一个类,它界说了要领的类型,使得可以将要领看成另一个要领的参数来进行通报,,这种将要领动态地赋给参数的做法,可以制止在措施中大量使用If-Else(Switch)语句,同时使得措施具有更好的可扩展性。

1.2 委托分类:

  1.单播委托:绑定单个要领

  2.多播委托:绑定多个要领

2、为什么使用委托

  开发人员可以把要领的引用封装在委托东西中(把过程的挪用转化为东西的挪用,丰裕浮现了委托加强了面向东西编程的思想),然后把委托东西通报给需要引用要领的代码,这样在编译的过程中我们并不知道挪用了哪个要领,这样一来,C#引入委托机制后,使得要领声明和要领实现的疏散,丰裕浮现了面向东西的编程思想。

3、委托怎么用

3.1  委托的界说其实很简单:如下,首先新建一个控制台措施,然后进行如下操纵,

(1)、新建了一个类用来 界说委托以及进行委托声明

          我们应该注意一点:委托的形参类型,形参个数和委托的返回值必需与将要绑定的要领的形参类型,形参个数和返回值一致;

public class GManage { /// <summary> /// 1、界说委托,它界说了可以代表的要领的类型 /// </summary> /// <param></param> /// <param></param> public delegate void GreetingDelegate(int x, int y); /// <summary> /// 2、声明delegate1变量 /// </summary> public GreetingDelegate delegate1; /// <summary> /// 3、被挪用委托的要领 /// </summary> /// <param></param> /// <param></param> public void SayHello(int x,int y) { if (delegate1 != null) //如果有要领注册委托变量 { delegate1(x, y); //通过委托挪用要领 } } }

  (2)、委托的要领绑定以及挪用

在控制台措施 Program.cs中添加如下代码:

public class Program { public void Write1(int x, int y) { Console.WriteLine("{0}+{1}={2}", x, y, x + y); } public static void Write2(int x, int y) { Console.WriteLine("{0}*{1}={2}", x, y, x * y); } static void Main(string[] args) { GManage gm = new GManage(); gm.delegate1 = new Program().Write1; //先给委托类型的变量赋值 gm.delegate1 += Program.Write2; //给此委托变量再绑定一个静态要领 gm.SayHello(1, 2); // 将先后挪用 Write1 与 Write2 要领 Console.ReadKey(); } }

运行,输出功效如下:

让我们进一步了解c#的博大精深

3.2   如上操纵我们进行了委托的操纵,主要两步操纵:声明委托和注册要领(也叫绑定要领)

  1.声明委托   用delegate声明;

2.绑定要领    绑定具体要领,通报要领名称;

3.3  如上操纵我们知道了委托可以进行要领绑定,同样的委托也可以进行要领解绑:如下我们只改削 Program.cs中的main要领。

在原有的根本上添加解绑要领 -= 

static void Main(string[] args) { GManage gm = new GManage(); gm.delegate1 += new Program().Write1; //先给委托类型的变量赋值 gm.delegate1 += Program.Write2; //给此委托变量再绑定一个静态要领 gm.SayHello(1, 2); // 将先后挪用 Write1 与 Write2 要领 Console.WriteLine("******解绑要领Write2后******"); gm.delegate1 -= Program.Write2; // 委托要领解绑 gm.SayHello(1, 2); // 解绑后只会挪用 Write1 Console.ReadKey(); }

运行功效如下:委托仅仅执行了Write1。

让我们进一步了解c#的博大精深

3.4 什么是委托链