八旬女码农为何裸死街头,数百只程序猿为何半夜惨叫?线程安全为何屡遭黑手?跨线程操作控件为何频频报错?晦涩难懂的篇篇装B教程,究竟是何人所为?EventArgs类的背后到底是委托还是事件?GUI编程的事件背后又隐藏着什么?敬请关注OOTV年度巨献《走近科学》,让我们跟随镜头走进委托和事件的内心世界。
一直对委托和事件概念模模糊糊,也搞不懂明明简单的代码为什么要用委托,经过一段时间的深入,终于明白一点了,现在就以一个菜鸟学习的心路历程,一步一步地“走近科学”。
视频在这里:http://blog.youkuaiyun.com/bzzd2001/article/details/43796309
一、为什么要使用委托
(如果你不在乎为什么要用委托,可以跳过本节,直接从第二部分开始阅读)
写了几个小程序,一直没觉得哪里该用委托,或者说写的时候对委托还不太了解。所以觉得要委托做什么呢?学了委托以后,当然可以在很多地方,硬硬地以委托的形势进行改写,这又有什么意义呢?除了增加代码量,没有任何好处。估计也是很多新手的困惑,觉得我不学委托,照样写代码。
我举个不太恰当的例子,你是一个孩子,刚刚学会了走,学会了跑,但还没有学会跳(甚至不知道别人还有“跳”这种技能),你也同样会认为这个世界已经是你的了,从家到学校的路程,照样和那些掌握了“跳”技能的同学一样能完成。而有一些刚刚学会“跳”的同学,为了在上学路上用上这个技能,还会比你更费力,用时更长。你为此不理解学习“跳”的意义,但当有一次,途径的一个小桥断了,你不得不绕了很远的路才到学校,而别人可以轻松的“跳”过去。这一次还算幸运,还有路可绕,可一下次,很有可能你遇到的问题,已经无路可绕,非“跳”不可了。
那对于委托来说,什么时候才会非“委托”不可呢?我们还是通过代码来看吧
让一个新手来做一道题:实现一个能定时做某事的类,就像winform的timer控件一样的东西,快过年了,我们就写个能给大家拜年的代码吧
namespace delegate_1
{
//我们写的定时器类
class MyTimer
{
public static void Loop(int sleep,string title) //一个能循环调用方法的方法
{
Console.WriteLine("我要开始{0}了!",title); //先喊一嗓子告诉大家我要做啥子
while (true)
{
DoSomeThing();
System.Threading.Thread.Sleep(sleep); //间隔一下再循环
}
}
public static void DoSomeThing() //具体要做事的在这里
{
Console.WriteLine("新年快乐!万事如意!");
Console.WriteLine("********^**********");
Console.WriteLine("********^**********");
}
}
class Program
{
//客户端调用我们写好的类
static void Main(string[] args)
{
MyTimer.Loop(2000, "拜年"); //把要间隔的时间和要做的事情的名称传到调用的方法里
}
}
}
代码很容易懂吧,每2秒向大家拜一次年。但这个定时器类不能只用来拜年了,春节很快就过去了,这个类就废了。
现在我想用这个类,来做一个电子表,每1秒显示一下当前时间。
嗯,好办,这样改
namespace delegate_1
{
//我们写的定时器类
class MyTimer
{
public static void Loop(int sleep,string title) //一个能循环调用方法的方法
{
Console.WriteLine("我要开始{0}了!",title); //先喊一嗓子告诉大家我要做啥子
while (true)
{
// DoSomeThing(); //原来写的方法调用要注释掉
TimeDisplay(); //调用新写的时间显示方法
System.Threading.Thread.Sleep(sleep); //间隔一下再循环
}
}
public static void DoSomeThing() //具体要做事的在这里,其实具体的做事的方法写在定时器类里是不好的
{
Console.WriteLine("新年快乐!万事如意!");
Console.WriteLine("********^**********");
Console.WriteLine("********^**********");
}
pu

本文以初学者的角度出发,逐步解析了C#中委托的基本概念及其应用场景,包括为什么要使用委托、委托的定义与调用、合并与删除委托等内容。
最低0.47元/天 解锁文章
133

被折叠的 条评论
为什么被折叠?



