C# 高级编程个人笔记搬运 七(委托)

本文探讨了C#中的委托概念,强调其在编程中的重要性,特别是对于事件处理和线程操作。文章解释了委托的声明、使用,包括Action<T>和Func<T>委托的运用,以及如何通过匿名方法和lambda表达式来实现委托。文中还提到了委托的多播特性和在不同类型的操作中的应用。
摘要由CSDN通过智能技术生成

最近有点忙,我真的应该开香槟庆祝下,终于摆脱了那位写诡异代码的同事了,像俄罗斯套娃一样写代码的人才,感觉有些人真的不适合编程。虽然我也很菜,但是我努力当一只小青蛙。

委托在C#开发者中用的其实很多的,尤其是在做桌面应用程序的时候,在涉及到消息响应的功能模块时几乎都要用的吧。委托也是一个基础的技术了,但是我们今天也要好好的剖析一下这个。我们习惯于把数据作为参数传递,但是当我们要把方法作为参数传递给其它方法时,就会需要委托。

委托是寻址方法的.NET版本,在C++中,函数指针只不过是一个指向内存位置的指针,它不是类型安全的,因为它不知道实际指向的是什么,更别说参数和返回类型等项了。但是.NET委托是完全不同的,它是类型安全的,它定义了返回类型和参数的类型。委托类不仅包含对方法的引用,也可以包含对多个方法的引用(就是多播方式,后面慢慢讲)

我们经常用的lambda表达式与委托直接相关。当参数是委托类型时,就可以使用lambda表达式实现委托引用的方法。

解剖委托

当要把方法作为参数传给其它方法的时候,就需要使用委托。一般我们都是把对象或者具体的值作为参数进行传递,那么什么时候才是要把方法作为参数传给其它方法的时候呢?

①、启动线程和任务——在c#中,可以告诉计算机并行运行某些新的执行序列,同时运行当前的任务。这种序列说白了就是线程。我们经常会start( )就可以启动一个线程。如果要告诉计算机启动一个新的执行序列,就必须要告诉计算机在什么地方启动新线程,就是说Thread类的构造函数必须带有一个参数,该参数定义了线程调用的方法。例如:

// 我们不可能直接
Thread t = new Thread();
t.Start();  //这启动的啥玩意线程也不知道


// 正确的做法
Thread t = new Thread(() => AA());
t.Start();  // 告诉计算机你要把AA方法用另起一个线程去跑

②、通用库类——许多库包含执行各种标准任务的代码。这些库通常可以自我包含,这样在编写库时,就会知道任务该如何执行。但是如果任务中还包含有子任务,只有使用该库的客户端代码才知道如何执行这些子任务。例如,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值