2012年6月28日

C#非泛型集合类-ArrayList查找元素

摘要: 为了在数组列表中查找元素,最常使用的是IndexOf或LastIndexOf方法,另外,还可以使用BinarySearch方法执行搜索。—IndexOf方法从前向后搜索指定的字符串,如果找到,返回匹配的第一项的自0开始的索引,否则,返回-1。—LastIndexOf方法从后向前搜索指定的字符串,如果找到,返回匹配的最后一项的自0开始的索引,否则,返回-1。这两个方法各自都有三个重载版本,表示从指定的索引处开始搜索或者是从指定索引处搜索指定长度的字符串。using System;using System.Collections;class Program{static void Main(str 阅读全文

posted @ 2012-06-28 09:30 流星落 阅读(647) 评论(0) 推荐(0)

C#非泛型集合类-ArrayList简单排序

摘要: 使用Sort方法,可以对集合中的元素进行排序。Sort有三种重载方法,声明代码如下所示。public void Sort();//使用集合元素的比较方式进行排序public void Sort(IComparer comparer);//使用自定义比较器进行排序public void Sort(int index, int count, IComparer comparer)//使用自定义比较器进行指定范围的排序注意:为使用Sort方法进行排序,集合中的所有元素必须实现IComparable接口,否则,将抛出异常。这里介绍使用第一种方法进行简单的排序实例using System;using S 阅读全文

posted @ 2012-06-28 09:29 流星落 阅读(441) 评论(0) 推荐(0)

C#非泛型集合类-ArrayList删除元素

摘要: ArrayList提供了三种方法将指定元素从集合中移除,这三种方法是Remove、RemoveAt和RemoveRange方法。—Remove方法接受一个object类型值的参数,用于移除指定元素值的第一个匹配集合元素。—RemoveAt方法接受一个int类型的参数,用于删除指定索引的集合元素。—RemoveRange方法从集合中移除一定范围的元素。这三个方法的声明如下所示。public void Remove(object obj);//从ArrayList实例中删除与obj值匹配的第一个元素public void RemoveAt(int index);//删除指定索引位置index的元素 阅读全文

posted @ 2012-06-28 09:28 流星落 阅读(4260) 评论(0) 推荐(0)

C#非泛型集合类-ArrayList添加元素

摘要: 有两种方法可用于向ArrayList添加元素:Add和AddRange。—Add方法将单个元素添加到列表的尾部。—AddRange方法获取一个实现ICollection接口的集合实例,例如Array、Queue、Stack等,并将这个集合实例按顺序添加到列表的尾部。ArrayList定义的Add方法语法如下:public int Add(object value);//参数:value:需要添加到ArrayList中的值。参数value是添加的元素,这些元素不管什么数据类型,都会被转换为Object类型后保存。此方法返回值为整型数据,用于返回添加元素索引,添加的元素将插入ArrayList集合 阅读全文

posted @ 2012-06-28 09:27 流星落 阅读(1392) 评论(0) 推荐(0)

C#非泛型集合类-ArrayList数组扩容

摘要: 这是对ArrayList效率影响比较大的一个因素。每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量的两倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,在这个临界点的扩容操作,应该来说是比较影响效率的。例1:比如,一个可能有200个元素的数据动态添加到一个以默认16个元素大小创建的ArrayList中,将会经过:16*2*2*2*2 = 256四次的扩容才会满足最终的要求,那么如果一开始就以:ArrayList List = new ArrayList( 210 );的方式创建Ar 阅读全文

posted @ 2012-06-28 09:26 流星落 阅读(430) 评论(0) 推荐(0)

C#非泛型集合类-创建ArrayList列表

摘要: 为了创建ArrayList,可以使用三种重载构造函数中的一种,还可以使用ArrayList的静态方法Repeat创建一个新的ArrayList。这三个构造函数的声明如下:public ArrayList();//使用默认的初始容量创建ArrayList,该实例并没有任何元素,默认的构造器将会以默认(16)的大小来初始化内部的数组。public ArrayList(ICollection c);//使用实现了ICollection接口的集合类来初始化新创建的ArrayList。用一个ICollection对象来构造,并将该集合的元素添加到ArrayList。public ArrayList(in 阅读全文

posted @ 2012-06-28 09:25 流星落 阅读(438) 评论(0) 推荐(0)

C#非泛型集合类-ArrayList数组集合类

摘要: ArrayList类可以视作是Array与Collection对象的结合,可以理解为Array的优化版本。该类既有数组的特征又有集合的特性,例如,既可以通过下标进行元素访问,对元素排序、搜索,又可以像处理集合一样添加、在指定索引插入及删除元素,还可以根据需要自动扩充容量。由于ArrayList中元素的类型默认为object类型,因此,在获取集合元素时需要进行强制类型转换。并且object是引用类型,在与值类型进行转换时,会引起装箱和拆箱的操作,需要付出一些性能代价。ArrayList类的属性和方法如下:ArrayList的属性Count:返回目前ArrayList包含的实际元素的数量,这个属性 阅读全文

posted @ 2012-06-28 09:24 流星落 阅读(333) 评论(0) 推荐(0)

System.Collections简介

摘要: System.Collections命名空间包含可使用的集合类和相关的接口。该命名空间下的.NET非泛型集合类如下所示:— System.Collections.ArrayList:数组集合类,使用大小可按动态增加的数组实现Ilist接口。— System.Collections.BitArray:布尔集合类,管理位值的压缩数组,该值为布尔值。— System.Collections.Queue:队列,表示对象的先进先出集合。— System.Collections.Stack:堆栈,表示对象的简单的后进先出集合。— System.Collections.Hashtable:哈希表,表示键/值 阅读全文

posted @ 2012-06-28 09:22 流星落 阅读(382) 评论(0) 推荐(0)

C#集合的概念

摘要: 集合原本是数学上的一个概念,表示一组具有某种性质的数学元素,引用到程序设计中表示一组具有相同性质的对象。集合好比容器,将一系列相似的组合一起,是一个特殊的类,和数组一样,可以通过索引访问集合成员,不同的是,集合的大小可以动态调整,可以在运行时添加或删除元素。集合中包含的对象称为集合元素。集合分为泛型集合类和非泛型集合类,泛型集合类一般位于System.Collections.Generic名称空间,非泛型集合类位于System.Collections名称空间。此外,System.Collections.Specialized名称空间中也包含一些有用的集合类。现在用一个Student数组来存储某 阅读全文

posted @ 2012-06-28 09:21 流星落 阅读(389) 评论(0) 推荐(0)

C#集合概述

摘要: 数组是一组具有相同名称和类型的变量集合,使用数组可以存储大量对象,可以通过索引来检索数组中的元素。但是数组初始化后不能再改变其大小。在程序中不能实现动态添加和删除元素,使数组有很多局限性。为解决这个问题,.net提供了各种集合对象,如ArrayList、HashTabel等。集合概述:事实上,C#中的数组上System.Array类的实例,是集合类中的一种。如果将紧密相关的数据存储到集合中,可以有效地处理这些数据。System.Array是数组的基类,System.Collections是一个命名空间,其提供一组接口和类,使用户能够对集合元素进行操作。System.Array类的使用:Syst 阅读全文

posted @ 2012-06-28 09:20 流星落 阅读(281) 评论(0) 推荐(0)

C#异常处理-自定义异常

摘要: 程序中可能出错的情形很多,如果系统提供地异常类不能够和程序中的异常相匹配,就需要程序员自定义异常类。自定义异常类的语法如下:class 自定义异常名:基类异常名{//语句块}自定义异常时应遵循的编码如下:将异常类命名为单词“Exception”结尾,如EmailException,UserMessageException。自定义异常类的代码如下:ApplicationException //定义异常类派生自基类public class EmailException:Application{public EmaiException(string msg):base(msg)//自定义异常类的构造 阅读全文

posted @ 2012-06-28 09:15 流星落 阅读(774) 评论(0) 推荐(0)

C#异常处理-使用throw引发异常

摘要: C#提供了throw语句来引发异常。使用throw语句既可以引发系统异常,也可以引发自定义异常。使用throw语句抛出异常的语法如下:throw ExObject;ExObject:所要抛出的异常对象,这个异常对象是派生自System.Exception类的类对象。实例代码如下:using System;class Program{static void Main(){ int[]array = new int[4]; try { for (int i = 0; i < 5; i++) { array[i] = i; if (i < array.Length) throw new 阅读全文

posted @ 2012-06-28 09:14 流星落 阅读(1461) 评论(0) 推荐(0)

C#异常处理-关键字finally的使用

摘要: 将finally语句与try…catch语句结合,形成try…catch…finally语句。finally语句同样以区块的方式存在,它被放在所有try…catch语句的最后面,程序执行完毕,最后都会跳到finally语句区块,执行其中的代码。无论程序是否产生异常,最后都会执行finally语句区块中的程序代码。其基本格式如下:try{被监控的代码}catch(异常类名 异常变量名){异常处理}…finally{程序代码}对于try…catch…finally语句的理解并不复杂,它只是比try…catch语句多了一个finally语句,如果程序中有一些在任何情形中都必须执行的代码,那么就可以将 阅读全文

posted @ 2012-06-28 09:13 流星落 阅读(803) 评论(0) 推荐(0)

C#异常处理-采用try、catch语句结构来捕获和处理异常

摘要: 使用try...catch语法结构如下:try{//程序代码}catch(Exception e){//错误代码处理}异常处理的语法:try{有可能产生错误的代码}catch(异常处理声明(声明此catch区段要捕获哪一种类型的异常错误,可以不用声明,这样子便会让catch去捕获任意类型的异常错误)){异常处理程序代码(当catch捕获到异常错误后,所采取对应的程序代码)}注意:利用catch来捕获try-catch中产生的异常错误,可以建立多个catch区段以捕获不同类型的异常错误。一个除数和零的简单例子:using System;public class DivisorIsZero{pri 阅读全文

posted @ 2012-06-28 09:12 流星落 阅读(908) 评论(0) 推荐(0)

C#异常处理-多重catch块

摘要: 有时候只使用一个异常处理不完全解决程序中出现的异常,需要多个异常处理,这就需要多重catch来实现。一段代码可能会生成多个异常当引发异常时,会按顺序来查看每个 catch 语句,并执行第一个类型与异常类型匹配的语句执行其中的一条 catch 语句之后,其他的 catch 语句将被忽略。多重catch语法如下:try{//正常程序处理语句} catch(ArrayIndexOutOfBoundsException e) {//系统子类异常} catch(Exception e) {//系统基类异常}注意:1. 一段代码可能会生成多个异常2. 当引发异常时,会按顺序来查看每个 catch 语句,并 阅读全文

posted @ 2012-06-28 09:12 流星落 阅读(6706) 评论(0) 推荐(0)

C#异常类相关总结

摘要: C#异常类一、基类ExceptionC#异常类二、常见的异常类1、SystemException类:该类是System命名空间中所有其他异常类的基类。(建议:公共语言运行时引发的异常通常用此类)2、ApplicationException类:该类表示应用程序发生非致命错误时所引发的异常(建议:应用程序自身引发的异常通常用此类)C#异常类三、与参数有关的异常类此类异常类均派生于SystemException,用于处理给方法成员传递的参数时发生异常1、ArgumentException类:该类用于处理参数无效的异常,除了继承来的属性名,此类还提供了string类型的属性ParamName表示引发异 阅读全文

posted @ 2012-06-28 09:11 流星落 阅读(257) 评论(0) 推荐(0)

C#异常处理-异常类

摘要: .net提供了大量与异常有关的类,用来处理异常,每一个异常类都表示一个异常,Exception类是所有异常的基类,异常类继承关系的层次结构图:C#中所有的异常处理都被视为类,所有异常都是由System.Exception所派生的。程序运行出现错误时,系统或当前的应用程序通过引发包含有关该错误的异常来报告错误。异常基类派生了系统异常和自定义异常,程序中出现系统异常类中涉及的异常,如“试图用某个数字除以零时”,就会发生DivideByzeroException异常,显示该异常给出的错误信息。程序中可能出现的异常种类繁多,.net不可能预定义所有的程序异常,程序员可以自己定义异常。自定义异常继承自S 阅读全文

posted @ 2012-06-28 09:08 流星落 阅读(494) 评论(0) 推荐(0)

C#异常处理-什么是异常

摘要: 利用调试和测试,可以有效地减少程序中的错误,但是程序中的错误是不可避免的,错误是客观存在的,程序员有义务和责任减少错误的发生。面对不可避免的,可以出现的错误,如何去面对,以保证程序运行可靠,具有非常重要的意义。什么是异常?先来看生活中的异常。我们去旅游度假,往返车票,度假期活动都已安排,按计划是一个非常舒适的假期。但是在度假期间,由于不适应气候,你感冒了,因为这个异常的情况,不得不终止度假,这便是出现了异常。如果你在度假前已经考虑到可以出现感冒的情况,并且准备了药物,经过治疗,不必终止度假,可以继续旅游,就是进行了异常处理。这个例子中,感冒是一个异常,因为预先考虑到可以出现这个问题,进行了合适 阅读全文

posted @ 2012-06-28 09:07 流星落 阅读(279) 评论(0) 推荐(0)

VS2008单元测试

摘要: 调试是解决错误的过程,测试是发现软件缺陷的过程。每一个软件在交付使用时前都必须经过测试。软件测试是软件开发的重要组成部分,现在已经发展成专门的技术。在消除了程序中的语法错误和运行错误后,程序仍然不能保证完全正确,程序员可以进行简单的单元测试,来确定基本功能是否完善,复杂的测试由专业人员进行。什么是单元测试呢?单元测试是测试隔离的单元或模块,对各种方法分别使用不同的输入和执行参数来测试。单元测试的依据是详细设计描述,单元测试应对模块内所有重要的控制路径设计测试用例,以便发现模块内部的错误。单元测试多采用白盒测试技术,系统内多个模块可以并行地进行测试。VS2008将单元测试工具集成在IDE中,方便 阅读全文

posted @ 2012-06-28 09:06 流星落 阅读(182) 评论(0) 推荐(0)

vs2008调试工具

摘要: 可以说,任何开发环境中最重要的工具都是调试器。Visual Studio的调试器非常强大,无论花费多少时间来学习它都是值得的。话虽然这么说,但是调试的基础知识是十分简单的。关键的三项技能是:如何设置断点及怎样运行到断点怎样单步执行到并越过方法调用怎样查看和修改变量、成员数据等的值VS2008调试器支持.net任何一种语言编写的的代码,使用调试器可以在代码中插入“断点”,断点通知调试器进入中断模式,处于暂停状态。VS2008设置断点的步骤如下:单击需要添加断点的代码左边的灰色区域,或者右击准备设置断点的代码行,在弹出的快捷菜单中,单点“断点”后,再单击“插入断点”即可。插入断点后的代码高亮显示, 阅读全文

posted @ 2012-06-28 09:05 流星落 阅读(659) 评论(0) 推荐(0)

C#应用程序调试-调试的必要性

摘要: 每一个应用程序开发出来,交给客户之前都要进行检查,确保其没有错误并且安全可靠,才能交付使用。任何软件都不能保证完全没有错误,程序员应尽力去发现其中的错误并修正这些错误。发现并消除错误的过程就是调试。调试的必要性:每个人编写应用程序时都可能犯错,常见的有标点缺失,关键字写错等语法错误,有时会出现逻辑错误,运行时错误,这些错误有的会导致程序不能正常运行,有的虽然运行,但运行的结果却与预期的大相径庭。调试是解决这些问题最直接的方法和手段。有人曾经说“程序其实都是调试出来的。”,从中可以看出调试的重要性。程序错误按照发生的机理分为三类:1、语法错误语法错误就是程序员在编写程序时遵循语法规范而产生的错误 阅读全文

posted @ 2012-06-28 09:04 流星落 阅读(472) 评论(0) 推荐(0)

C#事件-预定义事件处理方式

摘要: 学习事件,我觉得最不好理解的就是C#中预定义了事件,事件有很多种,比如说鼠标的事件:MouserMove,MouserDown等,键盘的事件:KeyUp,KeyDown,KeyPress。EventArgs是包含事件数据的类的基类,用于传递事件的细节。有事件,就会有对事件进行处理的方法,而事件和处理方法之间是怎么联系起来的呢?委托就是他们中间的桥梁,事件发生时,委托会知道,然后将事件传递给处理方法,处理方法进行相应处理。事件的类型一定是委托,委托为引发事件的类担当事件发送器的角色EventHandler是一个委托声明如下(其在.Net类库中如下声明的)public delegate void 阅读全文

posted @ 2012-06-28 09:03 流星落 阅读(377) 评论(0) 推荐(0)

C#事件-趣谈事件与委托

摘要: 事件与委托似乎很难以理解,这是因为它们的使用方式与常用的编码有很大的差别,例如通常编写的都是同步代码,调用一个类型的方法,会即刻出现方法执行的结果,这是符合逻辑的。但在某些情况中,同步代码未必满足需求,拿公共汽车来打个比方,如果交通管制中心希望每一辆公车到达一个站点时都发送给自己一个信号以便自己能够随时掌握交通状况,使用同步代码,公汽对象肯定需要调用管制中心对象,这样就出现了我们一直不愿意看到的情况:两个类型紧密地耦合在一起。既然要其它类型对自己的行为作出反应,亲自调用其类型的方法似乎不可避免,在同步代码中,很难避免这种紧密的类型调用关系。另一个差别是在一般情况下,我们只将属性作为参数传递给方 阅读全文

posted @ 2012-06-28 09:02 流星落 阅读(200) 评论(0) 推荐(0)

C#事件-自定义事件的使用方法

摘要: 1、声明一个委托类 public delegate SomethingChangedHandler(object sender,EventArgs e);2、在你的类中声明一个事件绑定到该委托 public event SomethingChangedHandler Changed;3、在相应的方法中触发此事件public void ChangeSomething(){Changed(this,new EventArgs); //触发事件}4、在调用者订阅事件your class's instance.Changed+=new SomethingChangedHandler(你的方法名 阅读全文

posted @ 2012-06-28 09:01 流星落 阅读(1175) 评论(0) 推荐(0)

C#事件-支持发布者/订阅者模式

摘要: C#事件支持发布者/订阅者模式,发布者将事件通知给订阅者,而订阅者在事件发生时调用已经注册好的事件处理函数。首先要在一个类中定义某种类型的委托和此种委托类型事件。然后在该类中通过一个函数,将该事件进行触发。 当外部其他类有对该事件订阅时候,其他类会转去处理该事件的处理程序。从而完成信息的交流。这样做,一个最大的好处就是事件触发类不用关心该事件的所有处理程序,只关心他自己的工作以及他所关心的事件即可。而对该事件感兴趣的类会首先订阅该事件,当该事件发生时会捕捉到事件信息,并转去处理。举一个简单的例子 有两个类,机器mechine类,和维修工check类。mechine类在运行过程当中如果出现某种故 阅读全文

posted @ 2012-06-28 09:01 流星落 阅读(636) 评论(0) 推荐(0)

C#事件-定义事件

摘要: 具体方法: 定义事件委托定义:public delegate void EventFountion(Param param);事件定义:public event EventFountion eventFountion;调用事件:if (eventFountion!= null) eventFountion(this.param);使用事件事件触发后的方法public void a_eventFountion(Param param){...}注册事件ClassA a=new ClassA();a.eventFountion+=new ClassA.EventFountion(a_eventFo 阅读全文

posted @ 2012-06-28 08:59 流星落 阅读(314) 评论(0) 推荐(0)

C#事件-综合案例分析

摘要: 面试题:晚上猫大叫一声,主人被惊醒,老鼠被下跑。用C#实现这个过程。这个题目中一共有三个对象:猫、主人和老鼠。这三个对象之间即不属于Is a...的关系,也不属于Has a...的关系,但三者又有相互联系。不能把主人和老鼠作为猫的成员变量出现,因为猫对象并不拥有主人和老鼠这两个对象。不能在猫任何方法中实例化主人和老鼠。因为猫的任何动作都不会动态产生主人和老鼠。不能在猫的Cry方法中传入主人对象和老鼠对象,因为猫大叫不是为了叫醒主人或吓跑老鼠,可能是猫正在说梦话。所以把主人和老鼠对象传递给猫的Cry()方法也不合情理。通过上面分析我们看到,即不能把主人和老鼠作为猫的成员变量,又不能动态产生或接收 阅读全文

posted @ 2012-06-28 08:58 流星落 阅读(285) 评论(0) 推荐(0)

C#事件-事件本身就是一种多播委托

摘要: C#中的事件就是委托的一个变量。它和属性、方法一样,都是类的成员。只不过事件是指向一个方法,当事件被触发时,就会执行对象的相关方法。事件的这种对方法的引用并不是写死在代码里面的,而是可以进行更改的。辟如:我们在DotNet中按钮的OnClick事件,它可以指向符合OnClick事件签名的任何一个方法。1.事件的定义使用event关键字:public event CryHandler DuckCryEvent;其中的CryHandler是一个delegate。从上面的代码我们可以看出来:事件就是一个委托类型的变量。private delegate void CryHandler();2.指定事件 阅读全文

posted @ 2012-06-28 08:57 流星落 阅读(704) 评论(0) 推荐(0)

C#事件-事件处理

摘要: 万物皆对象!对象与对象之间不仅仅是存在关系,更是具有千丝万缕的联系。即:如何使得一个对象发生变化时,另一个对象也能随之发生变化。这种“一个对象的状态改变导致其它对象状态改变”的现象,我们称之为事件。定义:事件,是用来描述类的成员发生改变的对象。我们举一个例子,来理解上面的定义: 例如:路边有一条狗。你看它不爽,于是走上前去踢了它一脚。我们来看紧接着发生的事情:1、这条狗很胆小,它跑掉了;2、这条狗是恶狗,它将你反咬一口;3、这条狗身体瘦弱,经不起你的一脚,一命呜呼了;4、……我想说明的是:在你真正踢它之前,你无法知道它会干些什么!在这件事发生之前,这条狗也无法预计你会在什么时候踢它,它唯一能. 阅读全文

posted @ 2012-06-28 08:56 流星落 阅读(354) 评论(0) 推荐(0)

C#事件-事件学习好例子

摘要: public class ExWebDelegate2{public static void Main(){ Console.WriteLine("场景开始了"); Manager wang = new Manager(); Employee zhang = new Employee(); zhang.PlayGame += new PlayGameHandler(wang.SubMoney); //zhang.PlayGame是事件 /* * 当PlayGame事件产生时,就会调用Manager类的SubMoney方法 * */ Console.WriteLine(&qu 阅读全文

posted @ 2012-06-28 07:41 流星落 阅读(184) 评论(0) 推荐(0)

C#事件-换一个角度理解委托和事件

摘要: 我们建一个控制台程序。未使用委托、事件之前的代码 using System; class Program { static void Main(string[] args) { //实例化一个button类 Button btn = new Button(); btn.Click(); } } //首先要定义一个Button类,里面应该有一个Click方法 public class Button { //Click方法调用固定的方法 ... 阅读全文

posted @ 2012-06-28 07:40 流星落 阅读(255) 评论(0) 推荐(0)

C#事件-自定义事件

摘要: 事件有很多,比如说鼠标的事件:MouserMove,MouserDown等。键盘的事件:KeyUp,KeyDown,KeyPress。有事件,就会有对事件进行处理的方法,而事件和处理方法之间是怎么联系起来的呢?委托就是他们中间的桥梁,事件发生时,委托会知道,然后将事件传递给处理方法,处理方法进行相应处理。比如在WinForm中最常见的是按钮的Click事件,它是这样委托的:this.button1.Click += new System.EventHandler(this.button1_Click);按按钮后就会出发button1_Click方法进行处理。EventHandler就是系统类库 阅读全文

posted @ 2012-06-28 07:38 流星落 阅读(300) 评论(0) 推荐(0)

C#事件-经典小例子

摘要: publicclass EatEventArgs : EventArgs...{public String restrauntName; //饭店名称 publicdecimal moneyOut; //准备消费金额 }/**////<summary>/// 这个委托用来说明处理吃饭事件的方法的方法头(模式) ///</summary>publicdelegatevoid EatEventHandler(object sender, EatEventArgs e);/**////<summary>/// 引发吃饭事件(EateEvent)的类Master(主 阅读全文

posted @ 2012-06-28 07:37 流星落 阅读(318) 评论(0) 推荐(0)

C#事件-探寻事件本质

摘要: 如何定义一个事件?语法:访问修饰符 event关键字 委托类名 事件名;比如:public event somedelegatename myeventname;事件到底是什么类型(引用?值?)事件其实就是一个特殊的委托。MSDN中的C#参考里这样描述:事件是特殊类型的多路广播委托,仅可从声明它们的类或结构(发行者类)中调用。如果其他类或结构订阅了该事件,则当发行者类引发该事件时,会调用其事件处理程序方法。对于这一点,我们也可以从事件的定义中看出,不过就是在定义委托对象时加了event关键字表明这个委托现在叫事件。何谓事件的订阅(subscribe)?我们用VS建立一个只有一个按钮的winfo 阅读全文

posted @ 2012-06-28 07:36 流星落 阅读(499) 评论(0) 推荐(0)

C#委托-在窗体中使用委托和事件

摘要: 委托和事件在C#中使用非常广泛,例如,当我们点击某个“按钮”的时候,就会有一个“Click”事件触发,而这个事件会通知“委托”,在C#窗体应用程序中,“委托”的名字比较规范,统一使用“EventHandler”,它的具体格式是“void EventHandler(object sender, EventArgs e);”。相信大家都写过下面这样子的HelloWorld程序:当点击按钮的时候弹出一个对话框。我们怎样实现的呢?你肯定会说,我们在设计窗口双击按钮,就会自动为我们生成类似如下的方法:privatevoid button1_Click(objectsender, EventArgs e) 阅读全文

posted @ 2012-06-28 07:35 流星落 阅读(1150) 评论(0) 推荐(0)

C#事件-事件解析

摘要: 事件(event),这个词儿对于初学者来说,往往总是显得有些神秘,不易弄懂。而这些东西却往往又是编程中常用且非常重要的东西。大家都知道windows消息处理机制的重要,其实C#事件就是基于windows消息处理机制的,只是封装的更好,让开发者无须知道底层的消息处理机制,就可以开发出强大的基于事件的应用程序来。在以往我们编写这类程序中,往往采用等待机制,为了等待某件事情的发生,需要不断地检测某些判断变量,而引入事件编程后,大大简化了这种过程:- 使用事件,可以很方便地确定程序执行顺序。- 当事件驱动程序等待事件时,它不占用很多资源。事件驱动程序与过程式程序最大的不同就在于,程序不再不停地检查输入 阅读全文

posted @ 2012-06-28 07:33 流星落 阅读(307) 评论(0) 推荐(0)

C#事件-使用事件需要的步骤

摘要: 事件是C#中另一高级概念,使用方法和委托相关。奥运会参加百米的田径运动员听到枪声,比赛立即进行。其中枪声是事件,而运动员比赛就是这个事件发生后的动作。不参加该项比赛的人对枪声没有反应。从程序员的角度分析,当裁判员枪声响起,发生了一个事件,裁判员通知该事件发生,参加比赛的运动员仔细听枪声是否发生。运动员是该事件的订阅者,没有参赛的人不会注意,即没有订阅该事件。C#中使用事件需要的步骤:1、创建一个委托;2、将创建的委托与特定事件关联(.Net类库中的很多事件都是已经定制好的,所以他们也就有相应的一个委托,在编写关联C#事件处理程序--也就是当有事件发生时我们要执行的方法的时候我们需要和这个委托有 阅读全文

posted @ 2012-06-28 07:32 流星落 阅读(351) 评论(0) 推荐(0)

C#事件-什么是事件

摘要: 每天,我们的身边都在发生各种各样的新闻和事件,有让人不快的事件:跟女朋友分手了,国足又输了,飞机失事了,海地地震了……也有幸运的事件:考试拿了个高分,申雪赵宏博拿到冠军了……等等。什么是事件?这个问题曾经让我十分困扰,在《C#高级编程第6版》中,对事件是这样说的:事件表示C#中已定义的一个对象,即处理通知过程的对象。可是这样说未免抽象,对于像我这样的初学者往往还是难以理解。而我的理解是,事件是处理事件的对象感兴趣的,能够感知或捕获到一种事物状态的改变。说白了,事件即改变。哲学上说,事物的运动是永恒的,静止是相对的。永恒的运动意味着事物本身在发生着改变,所以无时无刻,我们生活的这个世界和宇宙都有 阅读全文

posted @ 2012-06-28 07:31 流星落 阅读(1439) 评论(0) 推荐(1)

C#委托-多播委托调用多个方法

摘要: 我们可不可以将两个以上的方法委托给一个对象呢?当然可以。多播委托就是指引用多个方法委托,它也是一个委托,当调用委托时,它连续调用每个方法,只要这些方法的签名与委托的定义相同。为了把委托的单个实例合并为一个多播委托,委托必须是同类型的,返回类型必须是void,不能带输出参数(但可以带引用参数),如果委托是有返回值的函数,则只能调用最后一个委托函数。当调用多播委托里,委托所表示的每个方法依次调用。如果有任何参数,它们将用于所有的方法。多播委托:1.委托声明包含的方法返回值必须为void,否则会抛出run-time exception。2.使用“+”、“+=”添加方法,“-”、“-=”删除方法。3. 阅读全文

posted @ 2012-06-28 07:28 流星落 阅读(2319) 评论(0) 推荐(0)

C#委托-小结

摘要: 委托包含对方法(不是方法名)的引用。使用委托可以在运行时决定调用哪个方法,甚至可以不用知道方法名就可以调用方法(因为我们是使用委托的对象来进行执行方法),执行(或调用)委托实际上将执行该委托所引用的方法。委托将一个委托对象与所指定的方法联系起来,该方法的实现就可以与该委托对象联系起来,这样该委托对象就可以调用那个特定的方法。但是,委托要求方法和委托的定义具有相同的方法签名(即两者都要接受相同个数和类型的参数),并返回相同类型的参数。注:被委托的方法的返回类型和参数列表相同(即参数类型和个数必须相同);委托有点类似于带参数的类声明,可以声明委托的对象,并用被委托的方法作为参数实例化这个对象。可以 阅读全文

posted @ 2012-06-28 07:26 流星落 阅读(171) 评论(0) 推荐(0)

C#委托-使用匿名方法

摘要: 使用C#委托还有另一种重要方法--通过匿名方法。其中,匿名方法是用作委托参数的一个代码块。请看下面的例子:匿名方法的作用是使代码更简化,方便了程序员。如果没有匿名方法,则定义一套事件监听需要这样:class Program{ public delegate void SomeDelegate(); // 定义委托 static void Main() { SomeType obj = new SomeType(); obj.SomeEvent += new SomeDelegate(MyEventHandler); } // 一般来说,定义的MyEventHandler方法只用来响应事件,只. 阅读全文

posted @ 2012-06-28 07:25 流星落 阅读(204) 评论(0) 推荐(0)

C#委托-委托作为方法的参数

摘要: 委托其实就像个中介,用于将方法传递给其他方法作为参数:using System;public delegate void mydelegate(string s); //声明参数为字符串无返回值的委托class Program{static void Main(){ Program p = new Program(); //实例化类 mydelegate my1 = new mydelegate(p.show2); //用被调用的方法实例化委托 p.show(my1, "abcdefg"); //类实例调用方法 Console.ReadLine();}private voi 阅读全文

posted @ 2012-06-28 07:23 流星落 阅读(1571) 评论(0) 推荐(0)

C#委托-总结实例

摘要: 委托是对函数的封装,可以当做给方法的特征指定一个名称。它本质上就是变相的类型安全的指针。假想场景:01国际计算机语言大会上,各种计算机语言汇聚一堂,共同探讨计算机语言的发展趋势和优势。由于语言众多,主办方pc和mac决定给每位参会者10分钟发言机会。Code is cheap。看看它们都怎么说:类图:代码如下:using System;using System.Collections.Generic;using System.Text;namespace CsStudy{ class DelegateStudy { interface IProgramLanguage { void Speak 阅读全文

posted @ 2012-06-28 07:22 流星落 阅读(208) 评论(0) 推荐(0)

C#委托-概念理解

摘要: MSDN上对委托的定义:委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。C#是一种面向对象的语言,C#一切皆对象。因此潜意识的想用面向对象来解释“委托”。但发现不论怎么解释都解释不了,也就越来越糊涂了,到最后不了了之。我们何不抛开面向对象,一步步的来看看什么是委托。首先对于委托我就看到的最多的一个概念是什么?没错是“方法”。方法:是一个带名称的、独立的、以可重用的方式放置的代码片段。方法无需应用程序其他部分的干预便能运行,如果创建的正确,则能够执行其名称指示的特定任务。可以看出 “方法”是“委托”中的一个比较重要的概念。那接下来我们思考“方法”和委托“之间”是 阅读全文

posted @ 2012-06-28 07:22 流星落 阅读(239) 评论(0) 推荐(0)

C#委托-知识点总结

摘要: 1.委托概念:当要把方法传送给其它方法时,需要使用委托。委托是一种特殊的引用类型,用于封装命名方法(静态或实例)或匿名方法。委托的作用相当于给方法签名指定名称。使用delegate关键字来声明一个委托引用类型,这种特殊的引用类型称为委托。2.定义委托:告诉编译器某个委托引用了某种类型的方法。定义引用无参数的方法的委托delegate string TestDelegate1 ();//定义了一个委托TestDelegate1,引用了返回值类型为string的方法,此方法不带任何参数。定义引用有参数的方法的委托delegate void TestDelegate2 (string message 阅读全文

posted @ 2012-06-28 07:20 流星落 阅读(199) 评论(0) 推荐(0)

C#委托-委托不关心被封装的类

摘要: 委托是C#中的一个全新的概念。类似于C++中的函数指针。但是,不像C++中的函数指针,委托是完全面向对象的; 不像指向成员函数的指针,委托封装一个对象的实例方法或静态方法。一个委托声明定义一个从System.Delegate派生的类。一个委托实例封装一个或多个方法,每一个被称为可调用的实体。委托的最有用和感兴趣的是,它不知道或不关心,它所封装的方法的类。所以说,委托是"匿名"引用。using System;//委托声明delegate void MyDelegate();//实现委托的类,一个静态方法,一个实例方法public class MyClass{public vo 阅读全文

posted @ 2012-06-28 07:19 流星落 阅读(263) 评论(0) 推荐(0)

C#委托-马戏表演简单实例

摘要: 我们设计一个马戏表演,传给它什么样的动物,就进行什么动物的表演。请新建一个名为“Delegate”的项目,然后添加如下代码。 using System;//声明一个动物表演类public class Animal{//狗表演,静态方法public static void DogAct(string name){ Console.WriteLine(name + "发出了汪汪两声狗叫,并伸出爪子要和你握手");}//猫表演,实例方法public void CatAct(string name){ Console.WriteLine(name + "发出了喵喵两声猫叫 阅读全文

posted @ 2012-06-28 07:18 流星落 阅读(217) 评论(0) 推荐(0)

C#委托-委托的使用

摘要: 定义和使用委托分三个步骤:1、委托声明。2、委托实例化。3、委托调用。一、定义委托定义委托的语法如下:<访问修饰符> delegate 返回类型 委托名();定义委托和定义方法很相似,委托没有具体的实现体,由关键字delegate声明,直接以分号结束。委托能够代表什么样的方法,由它的返回值类型和参数列表决定。如下定义如下委托:public delegate void MyDelegate(string name);那么使用MyDelegate委托代表的只可以是没有返回值,参数为一个字符串的方法。二、实例化委托定义了委托之后,如何使用委托代表方法执行呢?首先要实例化委托。实例化委托就 阅读全文

posted @ 2012-06-28 07:17 流星落 阅读(215) 评论(0) 推荐(0)

C#委托-委托概述

摘要: C#委托概述:委托这个词在生活中经常用到,委托律师打官司,委托房地产公司购买房子。委托保险代理人办理保险。委托就是把事情交给别人去办。C#中的委托和生活中的委托很相似,如果将一个方法委托给一个对象,那么这个对象就可以全权代理这个方法执行。委托声明定义一个类,它是从 System.Delegate 类派生的类。委托既然是一个类,那么它就可以被定义在任何地方,即可以定义在类的内部,也可以定义在类的外部。委托类似于函数指针,但是,与函数指针不同,委托是面向对象和类型安全的。函数指针只能引用静态方法,而委托既能引用静态方法,也能引用实例方法。C#委托实例封装了一个调用列表,该列表列出了一个或多个方法, 阅读全文

posted @ 2012-06-28 07:16 流星落 阅读(250) 评论(0) 推荐(0)

C#委托-怎样理解C#中“委托”的含义和用途

摘要: 下面是网友的回答:我是这样理解的:委托是对方法的引用,相当于方法的别名,也就是说委托与方法具有相同的行为。委托变量说白了就是接受方法名作为参数的变量,当我们使用这个委托变量的时候就相当于调用了这个方法。我也感觉"委托"就是方法别名,或者调用别人的方法时,不用原来的方法名,可以自己起一个有意义的名字(联想一下文件的快捷方式)委托在现实生活中来说就是你叫别人去帮你做一件事(别人做事用到方法),然后他把事做了之后给你返回个结果。你可以直接打电话给奥巴马,不过一般情况下是他的助手转接的,并且他的助手会告诉你,我们已经给你汇报啦,他的助手就是个委托。委托是为事件而生的,事件用的是消息 阅读全文

posted @ 2012-06-28 07:15 流星落 阅读(1986) 评论(0) 推荐(0)

导航