.NET委托:一个C#睡前故事

  英文版原作者:Chris Sells(www.sellsbrothers.com)

  翻译:袁晓辉(www.farproc.com http://blog.csdn.NET/uoyevoli)

  原文地址: http://dev.csdn.NET/article/82/82644.shtm

  紧耦合

  从前,在南方一块奇异的土地上,有个工人名叫彼得,他非常勤奋,对他的老板总是百依百顺。但是他的老板是个吝啬的人,从不信任别人,坚决要求随时知道彼得的工作进度,以防止他偷懒。但是彼得又不想让老板呆在他的办公室里站在背后盯着他,于是就对老板做出承诺:无论何时,只要我的工作取得了一点进展我都会及时让你知道。彼得通过周期性地使用"带类型的引用"(原文为:"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();
}
}

NET技术.NET委托:一个C#睡前故事,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。