1 / 15
文档名称:

C#:皮特的故事.pdf

格式:pdf   页数:15页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

C#:皮特的故事.pdf

上传人:n22x33 2015/9/23 文件大小:0 KB

下载得到文件列表

C#:皮特的故事.pdf

相关文档

文档介绍

文档介绍:C#:皮特的故事(完善代码可执行版,更新中) 收藏

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

("工人报告工作进度: 工作进行中");
//如果老板有在,通知老板,并得到老板的反应
if (_boss != null) ();

("工人报告工作进度: 工作完成");
//如果老板有在,通知老板,并得到老板的评分
if (_boss != null)
{
int grade = ();
("工人的工作得分:" + grade+"分");
}
}
}

class Boss
{
public void WorkStarted()
{
("老板说:“好好干!”");
}
public void WorkProgressing()
{
("老板说:“没干完别来烦我!”");
}
public int pleted()
{
("老板说:“没干完别来烦我!”");
return 4; /* 总分为 5 分*/
}
}

class Universe
{
static void Main()
{
Worker peter = new Worker();
Boss boss = new Boss();
//开始通知老板,要开始干活了
(boss);
();

("工人工作完成。");
();
}
}

}

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

namespace 皮特的故事_接口版
{
//工人报告工作进度事件接口
interface IWorkerEvents
{
void WorkStarted();
void WorkProgressing();
int pleted();
}

class Worker
{
//声明接口类型变量指向实现接口的类
private IWorkerEvents _events;

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

public void DoWork()
{
("工人报告工作进度: 工作开始");
//如果老板有在,通知老板,并得到老板的反应
if (_events != null