C#中的委托
【定义】:委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
一种引用类型,它是 C++ 函数指针的托管版本。委托可以引用实例和静态(在 Visual Basic 中为 Shared)方法,而函数指针只能引用静态(在 Visual Basic 中为 Shared)方法。 在C#中,委托是一种可以把引用存储为函数的类型。
委托的声明非常类似于函数,但不带函数体,且要使用delegate关键字。
委托的声明指定了一个函数签名,其中包含一个返回类型和参数列表。
在定义了委托后,就可以声明该委托类型的变量。
接着将这个变量初始化为与该委托有相同签名的函数引用。
之后,就可以使用委托变量调用这个函数,就像 该变量是一个函数一样。
在图片合并工具的开发过程中,少不了要分支处理的地方,有些地方分支起来比较麻烦,于是利用了下C#中的委托来处理。关于委托的好处,大道理我说不出来,看下面四段代码,看看你喜欢哪段。注意:这四段代码实现的结果是一样的
一种引用类型,它是 C++ 函数指针的托管版本。委托可以引用实例和静态(在 Visual Basic 中为 Shared)方法,而函数指针只能引用静态(在 Visual Basic 中为 Shared)方法。 在C#中,委托是一种可以把引用存储为函数的类型。
委托的声明非常类似于函数,但不带函数体,且要使用delegate关键字。
委托的声明指定了一个函数签名,其中包含一个返回类型和参数列表。
在定义了委托后,就可以声明该委托类型的变量。
接着将这个变量初始化为与该委托有相同签名的函数引用。
之后,就可以使用委托变量调用这个函数,就像 该变量是一个函数一样。
在图片合并工具的开发过程中,少不了要分支处理的地方,有些地方分支起来比较麻烦,于是利用了下C#中的委托来处理。关于委托的好处,大道理我说不出来,看下面四段代码,看看你喜欢哪段。注意:这四段代码实现的结果是一样的
public void doSomeThing() { int i=0; int n=10; int state = 0; for (i = 0; i < n; i++) { switch (state) { case 0: do1(); break; case 1: do2(); break; case 2: do3(); break; } } }
public void doSomeThing() { int i=0; int n=10; int state = 0; switch (state) { case 0: for (i = 0; i < n; i++) { do1(); } break; case 1: for (i = 0; i < n; i++) { do2(); } break; case 2: for (i = 0; i < n; i++) { do3(); } break; } }
delegate void dox(); public void doSomeThing() { int i=0; int n=10; int state = 0; dox d; switch (state) { case 0: d = new dox(do1); break; case 1: d = new dox(do2); break; case 2: d = new dox(do3); break; } for (i = 0; i < n; i++) { d(); } }
delegate void dox(); public void doSomeThing() { int i=0; int n=10; int state = 0; dox[] list=new dox[]{ do1,do2,do3 }; dox d = list[state]; for (i = 0; i < n; i++) { d(); } }
学会开心每一天(: