委托-c#版 逃离我推掉我的手 2021-09-16 03:28 367阅读 0赞 1. 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。 2.方法并不能直接被当作参数被传递和调用 3. 委托也是一种类型,所以委托和类是同级的,可以通过委托来掉用方法,不要误以为委托和方法同级的 4.委托的定义: public delegate int 委托名(int a, int b);它的定义有这几个特点,(1)可以用访问修饰符修饰。(2)delegate关键字。(3)有返回值和参数。 5.委托是一种类型,与之对应的方法必须和它具有相同的签名,即相同的参数个数,相同的参数类型和相同的返回值类型 6.无返回值的委托,你给它注册多少个方法,它就执 行多少个方法,而有返回值的委托,同样注册多少个方法就执行多少个方法,但返回的是最后一个方法的返回值。 7.使用-=最终是将委托置为null,为null另一个意思就是空引用,这样就可以等待垃圾回收器进行回收了。 # **例1:** # class Program { private delegate void Expression(); static void Main(string[] args) { //Expression ex = new Expression(Add);也可以,但没有下面这种常用 Expression ex = Add; Add(); Console.ReadKey(); } public static int a = 2; public static void Add() { Console.WriteLine(a + a); } } ![70][] # **例2:** # class Program { public delegate void P(); static void Main(string[] args) { P p = Person.Name ; p += Person.Age; p(); Console.ReadKey(); } public class Person { public static void Name() { Console.WriteLine("我是Zhangsan"); } public static void Age() { Console.WriteLine(",今年20岁"); } } } ![70 1][] # **例3:** # class Program { private delegate int Expression(int a, int b); static void Main(string[] args) { Calculate(Add, 1, 2); Console.ReadKey(); } static int Add(int a, int b) { return a + b; } static int Divide(int a, int b) { return a - b; } static void Calculate(Expression ex, int a, int b) { Console.WriteLine(ex(a, b)); } } ![70 2][] # 例四: # class Program { private delegate int Expression(int a, int b); static void Main(string[] args) { Expression add = new Expression(Add); Expression divide = Divide; Console.WriteLine(add(1, 2)); Console.WriteLine(divide(6, 2)); Console.ReadKey(); } static int Add(int a, int b) { return a + b; } static int Divide(int a, int b) { return a - b; } } ![70 3][] # 例五:(Action委托) # Action是系统内置(预定义)的一个委托类型,它指向了一个没有返回值的方法。 class Program { static void Main(string[] args) { Action a = PrintInt; Action<string> b = PrintString; Action<int, int> c = PrintTwoInt; a(); b("你好"); c(2,3); Console.ReadKey(); } static void PrintInt() { Console.WriteLine("hello world"); } static void PrintString(string str) { Console.WriteLine(str); } static void PrintTwoInt(int a,int b) { Console.WriteLine(a .ToString ()+ b.ToString ()); } } ![70 4][] # 例六:(Func委托) # Func是系统内置(预定义)的一个委托类型,它指向了带有一个返回值的方法。它可以传递0-16个参数类型,和一个返回值类型。 class Program { static void Main(string[] args) { Func<int> a = Test1;//Func中的泛型类型指的是方法的返回值类型 Func<string, int> b = Test2;//func后面可以跟很多类型,最后一个类型是返回值类型,前面的类型是参数类型,参数类型必须跟指定的方法的参数类型按照顺序对应 Func<int, int, int> c = Test3;//func后面必须指定一个返回值类型,参数类型可以有0-16个,先写参数类型,最后一个是返回值类型 a(); b("你好"); c(2,5); Console.ReadKey(); } static int Test1() { return 1; } static int Test2(string str) { Console.WriteLine(str); return 100; } static int Test3(int i,int j) { return i + j; } } ![70 5][] 实例:(猫捉老鼠,观察者模式,func) 猫类: class Cat { string name; public Cat (string name) { this.name = name; } public void CatComing() { Console.WriteLine(name + "来了"); if(catcome !=null) { catcome(); } } public Action catcome; } 老鼠类: class Mouse { string name; public Mouse (string name ,Cat cat) { this.name = name; cat.catcome += MouseRun; } public void MouseRun() { Console.WriteLine(name + "开始跑了"); } } 客户端: class Program { static void Main(string[] args) { Cat cat1 = new Cat("汤姆猫"); Mouse mouse1 = new Mouse("大老鼠",cat1 ); Mouse mouse2 = new Mouse("小老鼠",cat1 ); cat1.CatComing(); Console.ReadKey(); } } ![70 6][] [70]: /images/20210725/d8781e88a39a4be2b26e612e7fc6820f.png [70 1]: /images/20210725/208cef4221c24c6fa4d6a9b06d03ec36.png [70 2]: /images/20210725/a65672a5b0654b02bdb586995fe16bd0.png [70 3]: /images/20210725/80f0cbda2ee5470c9851fc1b57d51d60.png [70 4]: /images/20210725/15f3de05d46a48bdb5dbd59ba247b1bf.png [70 5]: /images/20210725/3bc79b384ebe49f1823b6de5387088bb.png [70 6]: /images/20210725/26006f792ea740d18b5bf2717535b106.png
相关 C#委托 一、什么是委托 委托是一种类型,就跟int,double,struct,string,class一样。它定义了一个函数的类型。现在,我们有一个方法,我们希望它的参数是某个 川长思鸟来/ 2024年02月17日 22:49/ 0 赞/ 64 阅读
相关 C#——委托 C\——委托 委托是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用。 在实例化委托时,你可以将其实例与任何具有兼容签名和返回类型的方法相关联。 你可以通过委托 冷不防/ 2023年01月03日 04:22/ 0 赞/ 240 阅读
相关 C#委托 委托: 委托定义了方法的类型,使得方法可以作为另一个方法的参数来进行传递,这样可以在程序中避免使用大量的判断语句,同时使程序具有更好的扩展性。 可以将多个方法绑定到同一个委 矫情吗;*/ 2022年09月17日 07:28/ 0 赞/ 197 阅读
相关 c#委托 首先创建个控制台应用程序在Program下创建一个无参数无返回值的静态方法,可以输出一句话 static void Text() { Cons 迈不过友情╰/ 2022年04月16日 06:15/ 0 赞/ 258 阅读
相关 C# 委托 一、什么是委托? 初次理解这么抽象的概念确实有点挺难的,如果学过C语言,可能知道C语言里可以把一个方法当做参数来传递,委托大概类似也是这样一个原理。 想象一下,在一个 ゞ 浴缸里的玫瑰/ 2022年04月08日 12:15/ 0 赞/ 282 阅读
相关 C# 委托 什么是委托? 委托和事件这两个概念是完全配合的。委托仅仅是函数指针,那就是说,它能够引用函数,通过传递地址的机制完成。委托是一个类,当你对它实例化时,要提供一个引 野性酷女/ 2022年02月16日 13:51/ 0 赞/ 281 阅读
相关 C# 委托 委托 作用:将多个参数相同的方法,进行委托统一调用,将参数和调用方法传递给委托,由委托调用。 好处:可以将多个方法内相同的部分提取出来,根据参数和方法参数,调用需要的 ゝ一世哀愁。/ 2021年10月14日 02:00/ 0 赞/ 384 阅读
相关 委托-c#版 1. 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Swi 逃离我推掉我的手/ 2021年09月16日 03:28/ 0 赞/ 368 阅读
相关 C# 委托 什么是委托? 委托是寻址方法的.NET版本,使用委托可以将方法作为参数进行传递。委托是一种特殊类型的对象,其特殊之处在于委托中包含的是一个或多个方法的地址,而不是数据。委 谁践踏了优雅/ 2021年06月24日 16:10/ 0 赞/ 500 阅读
相关 C#委托使用 委托是啥 委托是一个类,它定义了方法的类型,说白了就是将一个方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法。 可以避免在程序中大量使用If-Else 朱雀/ 2021年06月24日 16:00/ 0 赞/ 539 阅读
还没有评论,来说两句吧...