首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

C#入门讲解~该如何解决

2012-02-11 
C#入门讲解~~【摘要】英文版原作者:ChrisSells(www.sellsbrothers.com)翻译:袁晓辉(www.farproc.comhttp://b

C#入门讲解~~
【摘要】

英文版原作者:Chris   Sells(www.sellsbrothers.com)
翻译:袁晓辉(www.farproc.com   http://blog.csdn.net/uoyevoli)
从前,在南方一块奇异的土地上,有个工人名叫彼得,他非常勤奋,对他的老板总是百依百顺。但是他的老板是个吝啬的人,从不信任别人,坚决要求随时知道彼得的工作进度,以防止他偷懒。但是彼得又不想让老板呆在他的办公室里站在背后盯着他,于是就对老板做出承诺......

本文对理解.net的委托与事件大有裨益,故转贴于此。


【全文】
从前,在南方一块奇异的土地上,有个工人名叫彼得,他非常勤奋,对他的老板总是百依百顺。但是他的老板是个吝啬的人,从不信任别人,坚决要求随时知道彼得的工作进度,以防止他偷懒。但是彼得又不想让老板呆在他的办公室里站在背后盯着他,于是就对老板做出承诺:无论何时,只要我的工作取得了一点进展我都会及时让你知道。彼得通过周期性地使用“带类型的引用”(原文为:“typed   reference”   也就是delegate??)“回调”他的老板来实现他的承诺,如下:
class   Worker   {
        public   void   Advise(Boss   boss)   {   _boss   =   boss;   }
        public   void   DoWork()   {
                Console.WriteLine(“工作:   工作开始”);
                if(   _boss   !=   null   )   _boss.WorkStarted();

                Console.WriteLine(“工作:   工作进行中”);
                if(   _boss   !=   null   )   _boss.WorkProgressing();

                Console.WriteLine( "“工作:   工作完成” ");
                if(   _boss   !=   null   )   {
                        int   grade   =   _boss.WorkCompleted();
                        Console.WriteLine(“工人的工作得分=”   +   grade);
        }
}
private   Boss   _boss;
}

class   Boss   {
        public   void   WorkStarted()   {   /**//*   老板不关心。   */   }
        public   void   WorkProgressing()   {   /**//*老板不关心。   */   }
        public   int   WorkCompleted()   {
                Console.WriteLine(“时间差不多!”);
                return   2;   /**//*   总分为10   */
        }
}

class   Universe   {
        static   void   Main()   {
                Worker   peter   =   new   Worker();
                Boss   boss   =   new   Boss();
                peter.Advise(boss);
                peter.DoWork();

                Console.WriteLine(“Main:   工人工作完成”);
                Console.ReadLine();
        }
}
接口
  现在,彼得成了一个特殊的人,他不但能容忍吝啬的老板,而且和他周围的宇宙也有了密切的联系,以至于他认为宇宙对他的工作进度也感兴趣。不幸的是,他必须也给宇宙添加一个特殊的回调函数Advise来实现同时向他老板和宇宙报告工作进度。彼得想要把潜在的通知的列表和这些通知的实现方法分离开来,于是他决定把方法分离为一个接口:

interface   IWorkerEvents   {
        void   WorkStarted();
        void   WorkProgressing();
        int   WorkCompleted();
}

class   Worker   {
        public   void   Advise(IWorkerEvents   events)   {   _events   =   events;   }


        public   void   DoWork()   {
                Console.WriteLine(“工作:   工作开始”);
                if(   _events   !=   null   )   _events.WorkStarted();

                Console.WriteLine(“工作:   工作进行中”);
                if(_events   !=   null   )   _events.WorkProgressing();

                Console.WriteLine( "“工作:   工作完成” ");
                if(_events   !=   null   )   {
                        int   grade   =   _events.WorkCompleted();

                        Console.WriteLine(“工人的工作得分=”   +   grade);
                        }
        }
        private   IWorkerEvents   _events;
}

class   Boss   :   IWorkerEvents   {
        public   void   WorkStarted()   {   /**//*   老板不关心。   */   }
        public   void   WorkProgressing()   {   /**//*   老板不关心。   */   }
        public   int   WorkCompleted()   {
                Console.WriteLine(“时间差不多!”);
                return   3;   /**//*   总分为10   */
        }
}
委托
  不幸的是,每当彼得忙于通过接口的实现和老板交流时,就没有机会及时通知宇宙了。至少他应该忽略身在远方的老板的引用,好让其他实现了IWorkerEvents的对象得到他的工作报告。(”At   least   he 'd   abstracted   the   reference   of   his   boss   far   away   from   him   so   that   others   who   implemented   the   IWorkerEvents   interface   could   be   notified   of   his   work   progress”   原话如此,不理解到底是什么意思   )

  他的老板还是抱怨得很厉害。“彼得!”他老板吼道,“你为什么在工作一开始和工作进行中都来烦我?!我不关心这些事件。你不但强迫我实现了这些方法,而且还在浪费我宝贵的工作时间来处理你的事件,特别是当我外出的时候更是如此!你能不能不再来烦我?”



[解决办法]
有个想法,如果看编程语言就像看小说,那么中国将是什么样子。。。
应该遍地是程序员吧?
[解决办法]
maybe
[解决办法]
看过
[解决办法]
有才

[解决办法]
看过,看不懂~~

热点排行