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