- 浏览: 127538 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
hulibo:
太简单了 没参考价值
网上商城的数据库设计 -
lfc:
[img][/img][url][/url][flash= ...
Petshop 4.0 详细解释 -
早上好朋友:
引用
自学MVC(十):自己写的通用的JS分页控件-2009年05月27日 -
早上好朋友:
[flash=200,200][/flash][url][/u ...
自学MVC(十):自己写的通用的JS分页控件-2009年05月27日 -
银杏树:
参考一下。
网上商城的数据库设计
委托
委托作为函数的封装,可以当作给方法的特征指定一个名称。
事件
事件则是委托的一种特殊形式,当发生有意义的事情时,事件对象处理通知过程。事件其实就是设计模式中观察者模式在.net中的一种实现方式。
下面看实例来学习,实例的需求是,有一只老猫叫Tom,有两只老鼠叫Jerry和Jack,Tom只要一叫‘嘧,我是Tom!’,两只老鼠就说‘老猫来了,快跑!’。通过分析应该有Cat和Mouse类,在Main函数中执行,但Cat的Shout方法触发时,Mouse就执行Run方法,不过这里如何让Cat的Shout触发时,通知两只老鼠呢?显然老猫不会认识老鼠,也不会主动通知老鼠‘我来了,你们快跑’。所以Cat类中,是不应该关联Mouse类的。此时用委托事件的方式就是最好的处理方法了。
委托是一种引用方法的类型。一旦委托分配了方法,委托将与该方法具有完全相同的行为。委托对象用关键词delegate来声明。而事件是说在发生其他类或对象关注的事情是时,类或对象可通过事件通知他们。事件对象用event关键词声明。
public event CatShountEventHandler CatShout;
Cat类:
{
private string name;
public Cat(string name)
{
this.name = name;
}
//声明委托CatShoutEventHandler
public delegate void CatShoutEventHandler();
//声明事件CatShout,他的事件类型是委托CatShoutEventHandler
public event CatShoutEventHandler CatShout;
public void Shout()
{
Console.WriteLine("嘧,我是{0}。",name);
//表明但执行Shout()方法时,如果CatShout中有对象登记事件,则执行CatShout();
if (CatShout != null)
{
CatShout();
}
}
}
{
private string name;
public Mouse(string name)
{
this.name = name;
}
/// <summary>
/// 逃跑的方法
/// </summary>
public void Run()
{
Console.WriteLine("老猫来了,{0}快跑!",name);
}
}
main:
{
//实例化老猫Tom以及老鼠Jerry和Jack
Cat cat = new Cat("Tom");
Mouse mouse1 = new Mouse("Jerry");
Mouse mouse2 = new Mouse("Jack");
//表示将Mouse的Run方法通过实例化委托Cat.CatShoutEventHandler登记到Cat的事件CatShout()当中,“+=”表示“add_CatShout”
cat.CatShout += new Cat.CatShoutEventHandler(mouse1.Run);
cat.CatShout += new Cat.CatShoutEventHandler(mouse2.Run);
cat.Shout();
Console.Read();
}
说明:new Cat.CatShoutEventHandler(mouse1.Run)的含义是实例化一个委托,而委托的实例其实就是Mouse类的Run方法。而‘cat.CatShout += ’表示的就是‘cat.add_CatShout(new Cat.CatShoutEventHandler(mouse1.Run)'的意思。
“+="就是增加委托实例对象的意思。相应的"-="就是移除委托实例的意思。"-="就是"remove_CatShout()"的含义,使用它,就等于减少一个需要触发事件是通知大对象。
运行结果:
EventArgs是包含事件数据的类的基类.换句话这个类的作用就是用来在事件触发时传递数据用的。
新增的CatShoutEventArgs类:
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
修改后的Cat类:
{
private string name;
public Cat(string name)
{
this.name = name;
}
//声明委托CatShoutEventHandler,此时委托所代表的方法有两个参数,object参数和CatShoutEventArgs参数
public delegate void CatShoutEventHandler(object sender, CatShoutEventArgs args);
//声明事件CatShout,他的事件类型是委托CatShoutEventHandler
public event CatShoutEventHandler CatShout;
public void Shout()
{
Console.WriteLine("嘧,我是{0}。",name);
//表明但执行Shout()方法时,如果CatShout中有对象登记事件,则执行CatShout();
if (CatShout != null)
{
//声明并实例化了一个CatShoutEventArgs,并给name属性赋值为猫的名字
CatShoutEventArgs e = new CatShoutEventArgs();
e.Name = this.name;
//当事件触发时,通知所登记的对象,并将发送通知的自己以及需要的数据传递过去
CatShout(this, e);
}
}
}
修改后的Mouse类:
{
private string name;
public Mouse(string name)
{
this.name = name;
}
/// <summary>
/// 逃跑的方法
/// </summary>
public void Run(object sender,CatShoutEventArgs args)
{
Console.WriteLine("老猫{0}来了,{1}快跑!",args.Name,name);
}
}
Main不用修改,请看现在运行结果:
发表评论
-
webservice的几种调用方法
2009-10-10 17:35 1248一、WebService在cs后台程序中的调用 ... -
我是如何学习设计模式的十:工厂模式-这个是我花的心思最多的
2009-10-09 10:39 1071工厂模式 为什么会出 ... -
Asp.net ViewState
2009-08-27 14:20 1350ASP.NET中的ViewState ViewSta ... -
Stack,Queue,SortedList
2009-08-04 15:23 898using System; using System.Dat ... -
匿名方法
2009-08-04 09:21 835匿名方法优点:减少系统开销,在真正委托调用时才定义。 usi ... -
.NET WebService的创建、部署、运用
2009-07-24 13:41 1426项目要求:(简单点讲) ... -
C#生成缩略图
2009-07-13 10:01 1658using System; using System.Dat ... -
.net MD5
2009-06-17 10:19 895using System; using System.Dat ... -
给RadionButtonList控件加onclick属性
2009-05-13 16:25 1065RadionButtonList _Specialclassi ... -
设计模式学习笔记七:常用设计模式原则总结
2009-05-12 15:43 1016前面学习了一部分创建 ... -
设计模式学习笔记六——Adapter模式
2009-05-12 15:42 715动机:将一个类的接口转换成客户希望的另外一个接口,使得原本由于 ... -
设计模式学习笔记六:.NET反射工厂
2009-05-12 15:02 40131. 简述 通过前面的学习,我们以传统的方式实现了 ... -
设计模式学习笔记五——Prototype模式
2009-05-12 15:01 1046动机:使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创 ... -
设计模式学习笔记五:抽象工厂(Abstract Factory)
2009-05-12 14:58 14311.概述 意图: 提供一个创建一系列相关 ... -
设计模式学习笔记四——Builder模式
2009-05-12 14:52 1116动机:一个复杂对象由多个子对象构成,该对象创建的算法相对不变, ... -
设计模式学习笔记四:工厂方法(Factory Method)
2009-05-12 14:51 8771.概述 在软件系统中,经常面临着“某个对象”的创建工作 ... -
设计模式学习笔记三——Abstract Factory模式
2009-05-12 14:51 974动机:实现一系列相互依赖对象的创建,通过封装系列对象创建来隔离 ... -
设计模式学习笔记三:简单工厂(Simple Factory)
2009-05-12 14:50 881开始学习创建型模式,这些模式的使用是面向接口编程的必然结果,面 ... -
设计模式学习笔记二——Singleton模式
2009-05-12 14:49 844意图:出于某种目的(如性能考虑、逻辑性要求)要求一个类的实例只 ... -
设计模式学习笔记二:面向对象基础五之集合和泛型
2009-05-12 14:47 957数组 数组的优点:数组在内存中连续存储,可以快速而容易的 ...
相关推荐
面向对象与设计模式基础笔记,介绍了面相对象基础和几种设计模式。
本项目是《设计模式:可复用面向对象软件的基础》的学习笔记。 原书采用了 C++ 或 Smalltalk 语言进行代码示例,本项目统一采用 Java 提供丰富的样例。
[第5章:面向对象基础]java_封装性笔记,每一个知识点都精讲!
面向对象学习笔记
Java设计模式学习笔记
设计模式学习笔记,分析了GOF的23种模式和类设计的原则
Java 基础 第2阶段:面向对象编程——尚硅谷学习笔记(含面试题) 2023年
我收集的设计模式的学习笔记,采用pdf格式,便于收藏和查看
各个模式都有详细的例子C#学习笔记,打开就知道了
面向对象设计原则和23个设计模式的笔记: 面向对象的三个特征的个人理解; 面向对象的核心的6个设计原则的个人理解; 四人帮的23个设计模式的个人理解; 绝对原创,绝对经典.给大家共享下.
本文实例讲述了Javascript面向对象程序设计工厂模式。分享给大家供大家参考,具体如下: 工厂模式和单例模式(https://www.jb51.net/article/184230.htm)应该是设计模式中应用最多的模式了,工厂模式的定义:提供...
HeadFirst设计模式学习笔记比较全面详细地讲解了13个设计模式,有利于大家更好的学习HeadFirst设计模式,希望亲们会喜欢~~~
总结了java开发中的21种设计模式,详解和例子,带书签的pdf格式,方便阅读!
苏坤老师的第二季:C#面向对象基础,从视频讲课中整理出来的笔记,希望对你有用
设计模式学习笔记.ppt 自己写的一点学习笔记。
设计模式学习笔记,总共23个设计模式,还有几个设计原则
Java学习笔记-面向对象-001-面向对象概括 还会继续上传后续文本 详情访问http://www.feifeiblog.com/
Head First 设计模式学习笔记。更多内容请参见文章内容。
面向对象笔记,包括隐藏、重载、重写、接口、委托、事件等等。
23种设计模式学习笔记及源码,全部原创 欢迎提出意见和建议