【菜鸟学c#】委托和事件(一、委托)

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

       八旬女码农为何裸死街头,数百只程序猿为何半夜惨叫?线程安全为何屡遭黑手?跨线程操作控件为何频频报错?晦涩难懂的篇篇装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
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值