- 浏览: 130259 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
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 1294一、WebService在cs后台程序中的调用 ... -
我是如何学习设计模式的十:工厂模式-这个是我花的心思最多的
2009-10-09 10:39 1120工厂模式 为什么会出 ... -
Asp.net ViewState
2009-08-27 14:20 1406ASP.NET中的ViewState ViewSta ... -
Stack,Queue,SortedList
2009-08-04 15:23 930using System; using System.Dat ... -
匿名方法
2009-08-04 09:21 873匿名方法优点:减少系统开销,在真正委托调用时才定义。 usi ... -
.NET WebService的创建、部署、运用
2009-07-24 13:41 1481项目要求:(简单点讲) ... -
C#生成缩略图
2009-07-13 10:01 1701using System; using System.Dat ... -
.net MD5
2009-06-17 10:19 931using System; using System.Dat ... -
给RadionButtonList控件加onclick属性
2009-05-13 16:25 1103RadionButtonList _Specialclassi ... -
设计模式学习笔记七:常用设计模式原则总结
2009-05-12 15:43 1049前面学习了一部分创建 ... -
设计模式学习笔记六——Adapter模式
2009-05-12 15:42 758动机:将一个类的接口转换成客户希望的另外一个接口,使得原本由于 ... -
设计模式学习笔记六:.NET反射工厂
2009-05-12 15:02 40511. 简述 通过前面的学习,我们以传统的方式实现了 ... -
设计模式学习笔记五——Prototype模式
2009-05-12 15:01 1100动机:使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创 ... -
设计模式学习笔记五:抽象工厂(Abstract Factory)
2009-05-12 14:58 14691.概述 意图: 提供一个创建一系列相关 ... -
设计模式学习笔记四——Builder模式
2009-05-12 14:52 1153动机:一个复杂对象由多个子对象构成,该对象创建的算法相对不变, ... -
设计模式学习笔记四:工厂方法(Factory Method)
2009-05-12 14:51 9151.概述 在软件系统中,经常面临着“某个对象”的创建工作 ... -
设计模式学习笔记三——Abstract Factory模式
2009-05-12 14:51 1014动机:实现一系列相互依赖对象的创建,通过封装系列对象创建来隔离 ... -
设计模式学习笔记三:简单工厂(Simple Factory)
2009-05-12 14:50 919开始学习创建型模式,这些模式的使用是面向接口编程的必然结果,面 ... -
设计模式学习笔记二——Singleton模式
2009-05-12 14:49 883意图:出于某种目的(如性能考虑、逻辑性要求)要求一个类的实例只 ... -
设计模式学习笔记二:面向对象基础五之集合和泛型
2009-05-12 14:47 987数组 数组的优点:数组在内存中连续存储,可以快速而容易的 ...
相关推荐
1. UML类图:这是设计模式学习的基础,它用图形方式描绘类与类之间的关系,如继承、关联、聚合等,帮助我们更好地理解和设计系统架构。 2. 反射:.NET反射工厂模式利用反射机制动态创建对象,提供了在运行时获取...
以上是对《设计模式解析》第2版学习笔记的关键知识点总结,这些内容覆盖了面向对象的基本概念、UML的基础知识以及设计模式的重要模式,如Facade模式和Adapter模式。通过深入理解这些知识点,读者可以更好地应用于...
### Java基础学习笔记知识点 #### 一、Java学习路线概览 Java学习通常分为几个阶段,从基础到高级,逐步深化。以下是对给定文件中提到的学习路线的详细解析: ##### 第一阶段:Java基础 - **JAVASE**:Java标准版...
设计模式并非孤立存在,而是基于面向对象设计原则,如单一职责原则、开放封闭原则、里氏替换原则等。 创建型设计模式主要用于对象的创建,包括简单工厂模式、抽象工厂模式和工厂方法模式。简单工厂模式通过一个静态...
### PHP面向对象学习笔记之二:生成对象的设计模式 #### 一、单例模式(Singleton) **概述** 单例模式是一种常用的软件设计模式,在PHP面向对象编程中有着广泛的应用。这种模式确保整个应用程序中一个类只能有一个...
在深入探讨"C#高级编程"的学习笔记之前,我们先来理解一下C#这门语言的基础。C#(读作"C sharp")是由微软公司开发的一种面向对象的编程语言,主要用于构建Windows应用程序、Web应用以及移动应用。它在.NET框架或...
我已将此笔记本作为面向对象编程概念和设计模式的参考指南。 我的目标是让任何人都能找到遵循面向对象范式正确设计可重用且高效的代码所需的核心概念。 在尝试学习自己的同时,我一直在努力研究并浪费大量时间在多个...
《Visual C#学习笔记》是一本深入探讨C#编程语言及其在ASP.NET框架下应用的专业教程。这本书旨在为想要掌握C#和ASP.NET技术的读者提供详尽的指导,无论你是初学者还是有一定开发经验的程序员,都能从中受益匪浅。 ...
《C#中级教程学习笔记与工程实践》 C#是一种多范式编程语言,由微软公司为.NET框架设计,广泛应用于软件开发、游戏制作、Web应用等众多领域。本教程面向已经掌握C#基础的学员,旨在提升其在C#编程中的技能水平,...
【学习笔记 MHT2】是一份综合性的IT学习资料,主要涵盖了JavaScript编程、软件开发工具、Web服务器技术、编码解码方法以及设计模式等多个领域的知识。以下是对这些知识点的详细阐述: 1. **JavaScript经典技巧**:...
C#是一种由微软公司开发的面向对象的编程语言,它被广泛应用于Windows平台上的软件开发,尤其是游戏开发、Web应用和桌面应用。本篇“C#学习笔记精华”旨在为初学者和进阶者提供一个全面且深入的学习指南,帮助读者...
### Spring学习笔记知识点详解 #### 一、Spring框架概述 **Spring** 是一个开源的、分层的企业级应用开发框架,旨在简化Java EE应用程序的开发。它的主要目标是提高开发效率,减少耦合度,并提供一种更为简洁的...
C#是一种广泛应用于Windows平台和.NET框架的面向对象的编程语言。它由Microsoft公司开发,设计目的是提高软件开发效率和代码可读性。本篇笔记将深入探讨C#的基础知识,涵盖从基本语法到高级特性,包括命名空间、装箱...
首先,可以通过继承来覆盖父类方法,这是面向对象编程中最基本的多态特性。其次,包装设计模式也是一种常见的方法。定义一个新的类实现相同的接口,内部持有一个被增强对象的引用,覆盖需要增强的方法,而其他未增强...
C#是一种面向对象的编程语言,由微软公司开发并用于.NET框架中,广泛应用于桌面应用、游戏开发、Web服务和移动应用等领域。本篇将详细探讨C#的基础概念、语法和常见面试题,旨在帮助C#爱好者提升技能,顺利通过.NET...
8. **委托与事件**:委托是C#中的类型安全的回调机制,事件则常用于实现组件间的通信,这两者在GUI编程和异步编程中尤为重要。 9. **Lambda表达式与Linq**:Lambda表达式简化了匿名方法的使用,而LINQ(Language ...
C#是一种由微软公司开发的面向对象的编程语言,它被广泛应用于Windows应用程序、Web应用程序、游戏开发以及移动应用等领域。这份"C#基础笔记"涵盖了从零基础到入门的诸多重要知识点,旨在帮助编程初学者快速掌握这门...
34.面向对象的语言具有________性、_________性、________性 答:封装、继承、多态。 35.能用foreach遍历访问的对象需要实现 ________________接口或声明________________方法的类型。 答:IEnumerable 、 ...
Java是一种广泛使用的面向对象的编程语言,其基础知识是学习Java开发的基石。以下是基于提供的信息,对Java基础知识的详细说明: **循环中的退出关键字** 1. **break**:当在循环(如for,while或do-while)中遇到...