using System;

namespace delegate_event
{
// 定义一个猫类
class Cat
{
// 定义一个名字字段
private string name;
// 创建构造函数,參数为string,给小猫一个初始的名字
// 假设初始化的时候不写名字会报错。除非再写一个重载
public Cat (string name)
{
this.name = name;
}
// 定义一个托付。名字随便起
public delegate void CatShoutDelegate ();
// 定义一个事件,事件的类型是托付的名字
public event CatShoutDelegate CatShoutEvent;
// 定义一个猫叫的方法
public void Shout ()
{
Console.WriteLine ("喵~,我是{0}", name);
// 当运行猫叫的方法的时候,会推断托付的实例对象是否存在
// 当存在实例对象的时候,表示事件已经发生了
// 这个时候就该运行被托付的方法了,main函数中是托付的什么方法就运行什么方法
if (CatShoutEvent != null) {
// 运行事件的托付,就是间接的运行2仅仅老鼠的Run方法
CatShoutEvent();
}
} } class Mouse
{
private string name; public Mouse (string name)
{
this.name = name;
} public void Run ()
{
Console.WriteLine ("快跑!" + name+"老猫来了! ");
}
} class MainClass
{
public static void Main (string[] args)
{ Cat cat1 = new Cat ("Tom");
Mouse mouse1 = new Mouse ("Jerry");
Mouse mouse2 = new Mouse ("Jack");
// 表示将Mouse1的Run的方法通过实例托付给CatShoutDelegate登记到猫的事件CatShoutEvent里面。+=就是加入事件的意思
cat1.CatShoutEvent += new Cat.CatShoutDelegate (mouse1.Run);
cat1.CatShoutEvent += new Cat.CatShoutDelegate (mouse2.Run);
cat1.Shout();
Console.Read(); }
} }

最新文章

  1. Pipedata3d - Welding Neck Flange
  2. NK3C系统中ID的汉语名称
  3. 深入理解javascript---如何编写高质量的代码?
  4. Linux版OpenVPN安装、配置教程(转)
  5. python复杂网络分析库NetworkX
  6. TextView使用SpannableString设置复合文本
  7. Easy Problem-map和vector的使用
  8. ubuntu server 系统,更换阿里云源(用户更新源)
  9. 10个提供免费PHP脚本下载的网站
  10. poj1200Crazy Search (哈希)
  11. servlet三种实现方式之二继承GenericServlet开发
  12. block 解析 - 局部变量
  13. OSS.Common获取枚举字典列表标准库支持
  14. 巧用 BootStrap --- 栅格系统(布局)轻松搞定网页响应式布局!
  15. Python Cookbook(第3版)中文版:15.18 传递已打开的文件给C扩展
  16. Vue学习小结(一)安装依赖与数据来源
  17. Nginx、Tomcat配置https
  18. fullpage 中输入框弹起 页面上移问题处理
  19. Vim for Windows --ctags
  20. Java实现Zip压缩包解压

热门文章

  1. 洛谷P2766 最长不下降子序列问题 网络流_DP
  2. spring慕课网
  3. visio使用技巧
  4. vue路由知识整理
  5. __weak修饰符
  6. 疯狂软件对Oracle放弃Java EE的看法
  7. GET和POST请求的核心区别
  8. nyoj-673-悟空的难题(数组标记)
  9. bsp开发之OAL开发
  10. jquery去重