06 2012 档案

C#文件操作-File类和FileInfo类有什么区别?
摘要:System.IO命名空间中提供的文件操作类有File和FileInfo,这两个类的功能基本相同,只是File是静态类,其中所有方法都是静态的,可以通过类名直接调用,不需要实例化。而FileInfo是普通类,只有实例化对象后才可以调用其中的方法。File类是一个静态类,它对应整个文件系统进行操作,方法均为静态文法;如果只是对文件进行少量的操作,如判断文件是否存在之类或者对很多的文件进行操作,建议使用File类,可以避免频繁创建和释放对象的系统开销。FileInfo类是一个实例类,它对应某一个文件进行操作,方法大部分为实例方法,它的操作有可能是调用的File中的对应静态方法。如果是对一个文件进行 阅读全文

posted @ 2012-06-29 10:15 流星落 阅读(638) 评论(0) 推荐(0) 编辑

C#文件操作-FileInfo类
摘要:FileInfo类是一个密封类,它可以用来创建、复制、删除、移动和打开文件的实例方法。FileInfo类包括6个属性,可以用来获取文件的名称、完整路径等,具体说明如表所示。 FileInfo类的属性表属 性说 明属 性说 明Directory获取父目录Exists指定当前文件是否存在DirectoryName获取文件的完整路径Length获取当前文件的大小(字节)IsReadOnly获取或设置当前文件是否为只读Name获取文件的名称FileInfo和DirectoryInfo类一样,也包括了FileSystemInfo类继承而来的属性,在此不做详细介绍。除了上述属性之外,FileInfo类还包 阅读全文

posted @ 2012-06-29 10:13 流星落 阅读(3515) 评论(0) 推荐(0) 编辑

C#文件操作-File类
摘要:File类的常用静态方法表方 法说 明Create()在指定路径中创建文件Delete()删除指定的文件Exists()判断指定的文件是否存在Open()打开指定路径上的文件OpenRead()打开文件以进行读取OpenWrite()打开文件以进行写入Move()将指定文件移到新位置Copy()将指定文件复制到新文件Replace()使用其他文件的内容替换指定文件的内容CreateText()创建或打开一个文件文本,并写入文本OpenText()打开文本文件以进行读取AppendText()将文本追加到现有文件AppendAllText()将指定的字符串追加到文件中,如果文件还不存在则创建该文 阅读全文

posted @ 2012-06-29 10:11 流星落 阅读(359) 评论(0) 推荐(0) 编辑

C#文件操作-文件路径
摘要:文件操作涉及一个非常重要的概念——文件路径。文件路径是指用来标识系统中文件存放位置的字符串。如:D:\\test.txt,表示在D盘根目录下存入test.txt文件。文件路径分为绝对路径和相对路径。完整描述文件位置的路径就是绝对路径,相对于目标的位置就是相对路径。绝对路径:是从盘符开始的路径,形如C:\windows\system32\cmd.exe相对路径:是从当前路径开始的路径,假如当前路径为C:\windows要描述上述路径,只需输入system32\cmd.exe实际上,严格的相对路径写法应为.\system32\cmd.exe其中,.表示当前路径,在通道情况下可以省略,只有在特殊的情 阅读全文

posted @ 2012-06-29 10:10 流星落 阅读(620) 评论(0) 推荐(0) 编辑

C#文件处理-System.IO 命名空间常用的类
摘要:System.IO 命名空间常用的类类说明提供用于创建、复制、删除、移动和打开文件的静态方法,并协助创建 FileStream 对象。提供创建、复制、删除、移动和打开文件的实例方法,并且帮助创建 FileStream 对象。无法继承此类。FileStream公开以文件为主的 Stream,既支持同步读写操作,也支持异步读写操作。BinaryReader用特定的编码将基元数据类型读作二进制值。BinaryWriter以二进制形式将基元类型写入流,并支持用特定的编码写入字符串。BufferedStream给另一流上的读写操作添加一个缓冲层。无法继承此类。Directory公开用于创建、移动和枚举通 阅读全文

posted @ 2012-06-29 10:09 流星落 阅读(958) 评论(0) 推荐(0) 编辑

C#文件处理-文件管理
摘要:在操作系统下使用文件和文件夹,是大家都熟悉的操作,也是非常重要的操作。编写的程序,书写的文档都需要保存下来,保存的过程就是将文件写入磁盘的过程。对于已经存在磁盘上的文件,如果进行修改和查看,就必须从磁盘读取出来,进行相应的格式转换,变成可以读懂的内容,即进行读磁盘的操作。事实上我们每天都要进行读写磁盘的操作,操作系统和各种可视化应用程序,已经把读写磁盘的操作封装好,只要单击相应的按钮或者打开相应的菜单就可执行。每种编程语言都有从磁盘读数据和向磁盘写数据的技术。C#提供了System.IO的命名空间,用于处理文件/流的操作。通过运用System.IO.DirectoryInfo类和System. 阅读全文

posted @ 2012-06-29 10:08 流星落 阅读(306) 评论(0) 推荐(0) 编辑

C#泛型-使用IComparer子类的Sort排序方法
摘要:泛型的排序有3种方法,分别是:1、List<T>.Sort(),只能在集合元素实现了IComparable泛型接口时使用2、List<T>.Sort(Comparison<T>),Comparison<T>是一个方法委托,它带有2个参数T,返回int类型,可以灵活指定如何排序,但是需要编码时手动指定如何排序;3、List<T>.Sort(IComparer<T>),使用实现了IComparer<T>接口的类给集合排序,可以灵活指定如何排序,但是需预先定义好类的排序方法这里介绍第三种方法:首先定义一个类,用作集合 阅读全文

posted @ 2012-06-29 10:06 流星落 阅读(473) 评论(0) 推荐(0) 编辑

C#泛型-使用委托的Sort排序方法
摘要:泛型的排序有3种方法,分别是:1、List<T>.Sort(),只能在集合元素实现了IComparable泛型接口时使用2、List<T>.Sort(Comparison<T>),Comparison<T>是一个方法委托,它带有2个参数T,返回int类型,可以灵活指定如何排序,但是需要编码时手动指定如何排序;3、List<T>.Sort(IComparer<T>),使用实现了IComparer<T>接口的类给集合排序,可以灵活指定如何排序,但是需预先定义好类的排序方法这里介绍第二种方法:首先定义一个类,用作集合 阅读全文

posted @ 2012-06-29 09:59 流星落 阅读(737) 评论(0) 推荐(0) 编辑

C#泛型-无参数的Sort排序方法
摘要:泛型的排序有3种方法,分别是:1、List<T>.Sort(),只能在集合元素实现了IComparable泛型接口时使用2、List<T>.Sort(Comparison<T>),Comparison<T>是一个方法委托,它带有2个参数T,返回int类型,可以灵活指定如何排序,但是需要编码时手动指定如果排序;3、List<T>.Sort(IComparer<T>),使用实现了IComparer<T>接口的类给集合排序,可以灵活指定如何排序,但是需预先定义好类的排序方法这里介绍第一种方法:首先定义一个类,用作集合 阅读全文

posted @ 2012-06-29 09:58 流星落 阅读(378) 评论(0) 推荐(0) 编辑

C#泛型-泛型接口IComparer<T>——比较器
摘要:IComparer<T>接口定义了为比较两个对象而实现的方法。其定义如下:public interface IComparer<T>{inr Compare(T x,T y);}类型参数“T”是要比较的对象的类型。Compare方法比较两个对象并返回一个值,指示一个对象是小于,等于还是大于另一个对象。参数x是要比较的第一个对象,y是要比较的第二个对象,均属于类型T。如果返回值大于0,则x>y。如果返回值大于0,则x<y。如果返回值大于0,则x=y。IComparer<T>泛型接口主要的作用是,作为参数传入Sort()方法,实现对象比较方式的排序。 阅读全文

posted @ 2012-06-29 09:57 流星落 阅读(2537) 评论(0) 推荐(1) 编辑

C#泛型-泛型接口IComparable<T>
摘要:系统提供了许多泛型类和泛型接口,List<T>和Dictionary<K,V>是常用的泛型类。IComparable<T>是最常用的泛型接口。泛型接口具有一般接口的共同特点,即在接口中可以包含字段,属性,方法和索引器,但都不能实现。IComparable和IComparer接口区别如下:◆IComparable在要比较的对象的类中实现,可以比较该对象和另一个对象;◆IComparer在一个单独的类中实现,可以比较任意两个对象。IComparable接口规定了一个没有实现的方法CompareTo(Object obj),语法如下:public interfac 阅读全文

posted @ 2012-06-29 09:55 流星落 阅读(715) 评论(0) 推荐(0) 编辑

C#泛型-泛型集合Dictionary入门
摘要:1、命名空间: System.Collections.Generic(程序集:mscorlib)2、描述: 1)、从一组键(Key)到一组值(Value)的映射,每一个添加项都是由一个值及其相关连的键组成 2)、任何键都必须是唯一的 3)、键不能为空引用null(VB中的Nothing),若值为引用类型,则可以为空值 4)、Key和Value可以是任何类型(string,int,custom class 等)3、创建及初始化: Dictionary<int, string> myDictionary = newDictionary<int, string>();4、添加 阅读全文

posted @ 2012-06-29 09:53 流星落 阅读(297) 评论(0) 推荐(0) 编辑

C#泛型-泛型集合Dictionary<K,V>
摘要:在System.Collections.Generic命名空间中,与ArrayList相对应的泛型集合是List<T>,与HashTable相对应的泛型集合是Dictionary<K,V>,其存储数据的方式与哈希表相似,通过键/值来保存元素,并具有泛型的全部特征,编译时检查类型约束,读取时无须类型转换。电话本存储的例子中,使用Dictionary<K,V>来存储电话本信息,代码如下:Dictionary<string,TelNote> ht=new Dictionary<string,TelNote>();在Dictionary< 阅读全文

posted @ 2012-06-29 09:52 流星落 阅读(287) 评论(0) 推荐(0) 编辑

C#泛型-使用泛型List<T>
摘要:一、泛型的优点性能高。从前面的例子可以看出使用不需进行类型转换,可以避免装箱和拆箱操作,提高性能。类型安全。泛型集合对其存储对象进行了类型约束,不是定义时声明的类型,是无法存储到泛型集合中的,保证了数据类型的安全。代码重用。使用泛型类型可以最大限度地重用代码,保护类型的安全以及提高性能。使用泛型使用泛型可以定义泛型类,泛型接口,泛型方法等。.NET Framework类库在System.Collection.Generic愈命名空间中包含几个新的泛型集合类,List<T>和Dictionary<K,V>是其中非常重要的两种,泛型接口IComparable<T> 阅读全文

posted @ 2012-06-29 09:51 流星落 阅读(2361) 评论(0) 推荐(0) 编辑

C#泛型-什么是泛型
摘要:泛型:即通过参数化类型来实现在同一份代码上操作多种数据类型。泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用。C#泛型的作用概述:C#泛型赋予了代码更强的类型安全,更好的复用,更高的效率,更清晰的约束。在一个方法中,一个变量的值是可以作为参数,但其实这个变量的类型本身也可以作为参数。泛型允许我们在调用的时候再指定这个类型参数是什么。在.net中,泛型能够给我们带来的两个明显的好处是--类型安全和减少装箱、拆箱。下面我们先看一个例子,说明为什么要使用泛型。using System;using System.Collections;public class Pers 阅读全文

posted @ 2012-06-29 09:50 流星落 阅读(309) 评论(0) 推荐(0) 编辑

C#数组和集合专题5(Hashtable排序和遍历)
摘要:②.Hashtable排序Hashtable没有提供排序的方法,不能直接实现对象的排序。但ArrayList类有排序的方法,可以把所有的键对象存放到ArrayList中,排序完成后再从中取出每一个键对象并输出对应的员工对象。Hashtable中的Keys属性的作用是获取包含 Hashtable 中的键的 ICollection。ICollection 接口是 System.Collections 命名空间中类的基接口。ICollection 接口扩展 Ienumerable、IDictionary和IList 则是扩展 ICollection 的更为专用的接口。IDictionary 实现是键 阅读全文

posted @ 2012-06-29 09:49 流星落 阅读(347) 评论(0) 推荐(0) 编辑

C#数组和集合专题4(Hashtable类)
摘要:四、Hashtable类①.Hashtable概述通过Hashtable类将数据作为一组键值对来存储,这些键值对是根据编码来组织的,可以将键作为索引器来获得对应值的对象。Hashtable对象中的键值必须是唯一的,在Hashtable中一个值只允许出现一次,如果企图往Hashtable对象里添加已经存在键值,将会抛出ArgumentException异常。Hashtable类用于处理和表现类似键值对,其中键通常可用来快速查找,同时键是区分大小写;用于存储对应于键的值。Hashtable中键值对均为object类型,所以Hashtable可以支持任何类型的键值对.using System;usi 阅读全文

posted @ 2012-06-29 09:47 流星落 阅读(237) 评论(0) 推荐(0) 编辑

C#数组和集合专题3(ArrayList类)
摘要:三、.ArrayList类System.Collections命名空间常用类(ArrayList,HashTable)、接口(ICollection,IEnumerator,IList)和结构(DictionaryEntry)。ArrayList类和Array类的比较①. Array的容量或元素个数是固定的,而ArrayList的容量可以根据需要动态扩展。通过设置ArrayList.Capacity的值可以执行重新分配内存和复制元素等操作。②. 可以通过ArrayList提供的方法在某个时间追加、插入或移除一组元素,而在Array中一次只能对一个元素进行操作。③. Array的下标是可以设置的 阅读全文

posted @ 2012-06-29 09:46 流星落 阅读(243) 评论(0) 推荐(0) 编辑

C#数组和集合专题2(Array)
摘要:System.Array的属性和方法属性描述Length得到数组所有维元素总个数的属性实例方法描述CopyTo()将一个一维数组中所有的元素复制到另一个一维数组中GetLength()返回指定维的元素个数GetValue()通过索引返回指定元素的值SetValue()将数组中的指定元素设为指定值静态方法描述BinarySearch()使用二进制搜索方法搜索一维已排序数组中的某个值Clear()将数组中一组元素设为0或nullCopy()将数组中的一部分元素复制到另一个数组中CreateInstance()初始化Array类的实例IndexOf()返回给定值在一维数组中首次出现的位置索引Last 阅读全文

posted @ 2012-06-29 09:45 流星落 阅读(194) 评论(0) 推荐(0) 编辑

C#数组和集合专题1(Array)
摘要:一、创建Array数组 arrC#中提供了一个名为System.Array的类,它是CLR中所有数组的基类,通过它可以对数组进行许多的操作。Array arr=Array.CreateInstance(typeof(int),8);创建了一个int长度为8的一维数组arr,其中typeof用于获取类型的System.Type对象,Type实例可以表示类、值类型、数组、接口和枚举器。使用CreateInstance()的其它重载形式可以创建多维数组。要创建一个3行4列的二维字符串数组,可以这样写Arrar myStr=Array.CreateInstance(typeof(string),3,4 阅读全文

posted @ 2012-06-29 09:44 流星落 阅读(286) 评论(0) 推荐(0) 编辑

C#非泛型集合类-HashTable使用实例电话本
摘要:本例创建一个电话本,使用HashTable存储电话信息,每个人的姓名和电话作为一个整体存储,使用姓名作为键值,可以根据姓名查询电话号码。1、创建控制台应用程序。2、建立一个电话本类TelNote,此类只包括电话本中的姓名,电话号字段和属性。3、建立一个编辑电话本类TelNoteEdit,此类中完成电话本的操作,包括存在电话本信息,根据姓名查找电话号码等功能。4、在主函数中调用上面类和方法,实现电话本编辑功能。using System;using System.Collections;//创建电话本类,属性有姓名和电话public class TelNote{private string nam 阅读全文

posted @ 2012-06-29 09:43 流星落 阅读(533) 评论(0) 推荐(0) 编辑

C#非泛型集合类-HashTable的用法
摘要:哈希表,键/值对。类似于字典(比数组更强大)。哈希表是经过优化的,访问下标的对象先散列过。如果以任意类型键值访问其中元素会快于其他集合。GetHashCode()方法返回一个int型数据,使用这个键的值生成该int型数据。哈希表获取这个值最后返回一个索引,表示带有给定散列的数据项在字典中存储的位置。注:Hash,一般翻译做“散列”,也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre--mage),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能 会散列成相同的输出,而不 阅读全文

posted @ 2012-06-29 09:43 流星落 阅读(758) 评论(0) 推荐(0) 编辑

C#非泛型集合类-使用HashTable组织数据
摘要:HashTable称为哈希表,是System.Collections命名空间中的一个重要的类。与ArrayList不同,哈希表可以存储键/值(key/value)对的集合。如果把哈希表当做字典,那么“键”就是字典中查的单词,“值”就是关于单词解释内容,正因为这个特点,有人也叫哈希表称作“字典”。认识HashTable类在ArrayList集合中,可以使用索引访问元素。如果不能确切知道索引的值,访问就比较困难。HashTable集合利用键/值来存储数据,在哈希表,每个元素都是一个键/值对,并且是一一对应的,通过“键”就可以得到“值”。如果存储电话号码,通常是姓名和电话号码存在一起,存储时把姓名当 阅读全文

posted @ 2012-06-29 09:42 流星落 阅读(180) 评论(0) 推荐(0) 编辑

C#非泛型集合类-使用HashTable元素操作
摘要:在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key/ Value键值对均为object类型,所以Hashtable可以支持任何类型的key /Value键值对。和ArrayList相同,HashTable集合也有增、删、改、查等操作。给哈希表添加元素,使用Add()方法,示例代码如下:Hashtable ht=new Hashtable();//创建哈希表一、为哈希表添加 阅读全文

posted @ 2012-06-29 09:41 流星落 阅读(366) 评论(0) 推荐(0) 编辑

C#非泛型集合类-ArrayList遍历元素
摘要:检索其中一个元素,使用索引比较方便。如果遍历所有元素可以用for循环或者foreach语句来实现。代码如下:using System;using System.Collections;class Program{static void Main(string[]args){ ArrayList lst = new ArrayList(new string[6] { "元素一", "元素二", "元素三", "元素四", "元素五", "元素六" } ); for (int i 阅读全文

posted @ 2012-06-29 09:40 流星落 阅读(280) 评论(0) 推荐(0) 编辑

C#非泛型集合类-ArrayList插入元素
摘要:插入元素也是向集合中增加元素,与添加(Add或AddRange)元素不同的是,插入元素可以指定要插入的位置的索引,而添加只能在集合的尾部顺序添加。插入元素也有两种方法:Insert和InsertRange。—Insert方法添加单个元素到指定的索引位置。—InsertRange从指定的位置开始添加一个实现了ICollection接口的实例。这两个方法的声明如下所示:public virtual void Insert(int index, object value);//在指定的索引位置index中添加单个元素值value该方法指定插入元素的位置,参数index为插入元素的索引,value为插 阅读全文

posted @ 2012-06-29 09:39 流星落 阅读(429) 评论(0) 推荐(0) 编辑

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 流星落 阅读(634) 评论(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 流星落 阅读(434) 评论(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 流星落 阅读(4225) 评论(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 流星落 阅读(1375) 评论(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 流星落 阅读(417) 评论(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 流星落 阅读(434) 评论(0) 推荐(0) 编辑

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

posted @ 2012-06-28 09:24 流星落 阅读(322) 评论(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 流星落 阅读(373) 评论(0) 推荐(0) 编辑

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

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

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

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

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

posted @ 2012-06-28 09:15 流星落 阅读(753) 评论(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 流星落 阅读(1448) 评论(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 流星落 阅读(783) 评论(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 流星落 阅读(886) 评论(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 流星落 阅读(6604) 评论(0) 推荐(0) 编辑

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

posted @ 2012-06-28 09:02 流星落 阅读(198) 评论(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 流星落 阅读(1164) 评论(0) 推荐(0) 编辑

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

posted @ 2012-06-28 09:01 流星落 阅读(601) 评论(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 流星落 阅读(308) 评论(0) 推荐(0) 编辑

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

posted @ 2012-06-28 08:58 流星落 阅读(281) 评论(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 流星落 阅读(697) 评论(0) 推荐(0) 编辑

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

posted @ 2012-06-28 08:56 流星落 阅读(345) 评论(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 流星落 阅读(181) 评论(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 流星落 阅读(249) 评论(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 流星落 阅读(293) 评论(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 流星落 阅读(309) 评论(0) 推荐(0) 编辑

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

posted @ 2012-06-28 07:36 流星落 阅读(490) 评论(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 流星落 阅读(1137) 评论(0) 推荐(0) 编辑

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

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

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

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

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

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

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

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

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

posted @ 2012-06-28 07:26 流星落 阅读(165) 评论(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 流星落 阅读(198) 评论(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 流星落 阅读(1565) 评论(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 流星落 阅读(201) 评论(0) 推荐(0) 编辑

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

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

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

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

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

posted @ 2012-06-28 07:19 流星落 阅读(259) 评论(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 流星落 阅读(210) 评论(0) 推荐(0) 编辑

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

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

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

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

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

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

C#索引器-示例代码
摘要:using System;public class Photo //这个类是一个相片类{private string _title; //相片标题//先定义默认构造函数public Photo(){ //初始化相片标题的构造方法 _title = "我是张三";}public Photo(string title){ //初始化相片标题的构造方法 _title = title;}public string Title{ //属性 get { return _title; }}}public class Album{//相册类Photo[]photos; //用于存放照片的数 阅读全文

posted @ 2012-06-27 09:49 流星落 阅读(249) 评论(0) 推荐(0) 编辑

C#索引器-索引器和属性的区别
摘要:属性和索引器的差别:一个对象只有一个属性值,所以要存放多个值必须实例化多个对象(通常情况下,实例化一个数组的对象,接着实例化的对象赋给这个数组)。一个对象对应的索引是一个数组,并且可以存放多个数值或字符串,所以只需要实例化一个对象就可以存放以及访问多个存储内容。using System;using System.Collections.Generic;namespace aaa{public class arrClass{ //通过构造方法以及属性进行赋值 private string name;//定义一个字段 public string Name{ //定义一个属性,通过属性来修改name 阅读全文

posted @ 2012-06-27 09:48 流星落 阅读(283) 评论(0) 推荐(0) 编辑

C#索引器-索引器与数组属性的比较
摘要:索引器(Indexer)索引器允许类或结构的实例按照与数据相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。所以索引器也被称为有参属性。示例一:using System ;class ArrClass//没有索引器的类{private readonly string name;public ArrClass(string name){this.name = name;}public string Name{get{return name;}}}class IndexClass//带索引器的类{private string [] name = new string [10] 阅读全文

posted @ 2012-06-27 09:47 流星落 阅读(1153) 评论(0) 推荐(0) 编辑

C#索引器-索引器概述
摘要:数组中的元素可以通过索引进行检索,如果一个类中有很多对象,怎样简单、快速地查找到需要的对象以及对象的特性呢?索引器就是为了实现这样的功能而设计的。索引器允许类或结构的实例按照与数组相同的方式进行索引。可以简单地把索引器理解为书中的目录,字典中提供的检索的索引。索引器(Indexer)是C#引入的一个新型的类成员,它使得对象可以像数组那样被方便,直观的引用。索引器非常类似于我们前面讲到的属性,但索引器可以有参数列表,且只能作用在实例对象上,而不能在类上直接作用。索引器可以重载,以数组的形式访问类中的成员,实际上不单单是访问,可以在访问的代码中实现特定的处理。 阅读全文

posted @ 2012-06-27 09:46 流星落 阅读(200) 评论(0) 推荐(0) 编辑

C#索引器-索引器的定义
摘要:索引器定义类似于属性,但其功能与属性并不相同。索引器提供一种特殊的方法编写get和set访问器。属性可以像访问字段一样访问对象的数据,索引器可以使用户像访问数组一样访问类成员。定义索引器的语法如下:<访问修饰符> 类型名称 this [类型名称 参数名]{ get{//获得属性的代码} set{ //设置属性的代码}}索引器没有像属性和方法那样的名字,关键字this清楚地表达了索引器引用对象的特征。和属性一样,value关键字在set后的语句块里有参数传递意义。和方法一样,索引器有5种存取保护级别new、public、protected、internal、private,和4种继承 阅读全文

posted @ 2012-06-27 09:46 流星落 阅读(1372) 评论(0) 推荐(0) 编辑

C#接口-显式接口和隐式接口的实现
摘要:C#中对于接口的实现方式有隐式接口和显式接口两种:隐式地实现接口成员创建一个接口,IChinese,包含一个成员 Speak;我们创建一个类Speaker,实现接口Chinese//隐藏式实现例子public interface IChinese{ string Speak();}public class Speaker : IChinese{ public string Speak() { return "中文"; }}这个就是隐式实现接口。隐式实现调用方法如下:IChinese s = new Speaker();s.Speak();Speaker s = new Sp 阅读全文

posted @ 2012-06-27 09:45 流星落 阅读(306) 评论(0) 推荐(0) 编辑

C#接口、类和抽象类
摘要:一个类可以同时继承类和接口,或者抽象类和接口,抽象类和类不能在一个类的继承列表中同时出现。如果子类同时继承类,抽象类和接口,一定要把类或者抽象类写在前面,接口写在后面,类名和接口名之是用“,”隔开,接口没有先后顺序。每一种继承要根据各自的规则去实现。如果希望学生都具有姓名、性别、年龄和学号等属性,当可以直接在计算机专业的学生类中创建,但是,如果还有别的专业的学生,那么都要重新写一遍,不符合代码重用的原则。现在把公用代码提取出来创建一个父类,在父类中赋予这些属性就可以。由于学号只有学生才有,把学号属性放在学生接口中定义更合理,更有利于扩展。using System;public class Pe 阅读全文

posted @ 2012-06-27 09:44 流星落 阅读(240) 评论(0) 推荐(0) 编辑

C#类、接口、虚方法和抽象方法-抽象类与接口的区别与联系
摘要:C#抽象类和接口之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于抽象类和接口的选择显得比较随意。其实,两者之间还是有很大的区别的。首先,以抽象类的方式定义一个公共的抽象类Animal如下:public abstract class Animal { public abstract void Run(); public abstract void Eat(); } 注意:类中默认的范围是private, 一定要显式将抽象的内容显示声明为public然后使用接口的方式定义接口Animal如下:public interface IAnimal{ 阅读全文

posted @ 2012-06-27 09:43 流星落 阅读(302) 评论(0) 推荐(0) 编辑

C#类、接口、虚方法和抽象方法-抽象类和接口的相同点和区别
摘要:一、抽象类 (1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法 (2) 抽象类不能被实例化 (3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类 (4) 具体派生类必须覆盖基类的抽象方法 (5) 抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,则其具体派生类必须覆盖它们。如:using System;public abstract class A //抽象类A { private int num=0; public int Num //抽象类包含属性 { get { return num; } set ... 阅读全文

posted @ 2012-06-27 09:42 流星落 阅读(345) 评论(0) 推荐(0) 编辑

C#类、接口、虚方法和抽象方法-接口与抽象类的区别实例
摘要:1.抽象类可以有实现(包括构造函数),而接口不可以有任何实现。namespace ConsoleApplication1 { class Program { interface IMyInterface1 { void IMethod1(); void IMethod2(); } abstract class AMyClass1 { public abstract void AMethod1(); public abstract void AMethod2(); public AMyClass1() { } public void AMethod() { Co... 阅读全文

posted @ 2012-06-27 09:41 流星落 阅读(200) 评论(0) 推荐(0) 编辑

C#类、接口、虚方法和抽象方法-抽象类和接口的区别
摘要:一、抽象类: 抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。二、接口: 接口是引用类型的,类似于类,和抽象类的相似之处有三点: 1、不能实例化; 2、包含未实现的方法声明; 3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员); 另外,接口有如下特性:接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成 阅读全文

posted @ 2012-06-27 09:40 流星落 阅读(500) 评论(0) 推荐(0) 编辑

C#类、接口、虚方法和抽象方法-非抽象类与接口的差别
摘要:非抽象类和接口的差别很大,它们的差别主要表现在以下几个方面:1、非抽象类可以有成员变量、常量和构造函数,而接口中不能存在常量、域、操作符、构造函数或析构函数,而且不能包含任何静态成员。2、一个非抽象类可以继承多个接口,而只能继承一个类;3、非抽象类中可以定义具体的方法和实现,而接口只定义方法没有具体的实现;4、接口成员一定是公共的,而且不能声明为虚拟或者是静态的,而非抽象类中是没有这些限制。5、非抽象类可以被实例化,而接口不可以。一般来说,非抽象类的内容较接口要丰富得多,非抽象类可以有面向对象所有的绝大部分组成元素。但是接口相对于非抽象类来说更加灵活,两者在使用上冲突不大,在使用的时候视具体情 阅读全文

posted @ 2012-06-27 09:39 流星落 阅读(284) 评论(0) 推荐(0) 编辑

C#类、接口、虚方法和抽象方法-虚拟方法与抽象方法之区别
摘要:虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢?1. 虚方法必须有实现部分,并为派生类提供了重写该方法的选项。抽象方法没有提供实现部分,抽象方法是一种强制派生类重写的方法,否则派生类将不能被实例化。//抽象方法publicabstractclass Animal{publicabstractvoid Sleep();publicabstractvoid Eat();}//虚方法publicclass Animal{publicvirtualvoid Sleep(){}publicvirtualvoid Eat(){}}2. 抽象方法只能在抽象类中声明, 抽象方法必须在派生类中重写。虚 阅读全文

posted @ 2012-06-27 09:38 流星落 阅读(622) 评论(0) 推荐(0) 编辑

C#接口-接口的继承
摘要:类之间可以继承,和类一样,接口也允许继承。C#中接口可以多继承,接口之间可以互相继承和多继承。普通类和抽象类可以继承接口。一个类可以同时继承一个类和多个接口,但是接口不能继承类。假如你是一名在职学习的学生,你就具有双重身份。一个身份是学生,必须完成学习任务,另一身份是职员,必须完成工作任务。进一步说,如果你是计算机类学生,除学基础课外,还必须学习C#程序设计。现在建立一个模型,应该如何建立?我们首先来定义一个学生接口,规定学生必须学习,再建立一个职员接口,规定职员必须完成工作任务。计算机专业的学生,除了完成一般学习任务,还是学习C#。可以再定义一个接口,继承学生接口,规定自己的学习任务。usi 阅读全文

posted @ 2012-06-27 09:37 流星落 阅读(7559) 评论(0) 推荐(0) 编辑

C#接口-深入浅出(这篇写得很好)
摘要:假设我们公司有两种程序员:VB程序员指的是用VB写程序的程序员,用VBpro这个类表示;C程序员指的是用C写程序的程序员,用Cpro这个类来表示。每个类都有一个WriteCode()方法。现在公司来了一个项目,要求派某个程序员写一个程序。using System;//vb程序员class VBpro{public void WriteCode(){ Console.WriteLine("我用vb写代码");}}//c程序员class Cpro{public void WriteCode(){ Console.WriteLine("我用c写代码");}}/ 阅读全文

posted @ 2012-06-27 09:36 流星落 阅读(782) 评论(0) 推荐(0) 编辑

C#接口-接口作为参数
摘要:接口作为参数和返回值,都是同样的作用,所有继承了这个接口的类,都可以使用。也就是说,你给这个方法传参数的时候,可以把继承了这个接口的类的实例传给这个方法,同样的道理,你可以把继承了这个接口的类返回。接口做为参数传递,传递的是实现了接口的对象; 接口作为类型返回,返回的是实现了接口的对象。接口的传递与返回就是围绕着上面的两句话展开的。using System;// 一个人类的接口public interface IPerson{void Say();}// 一个男人的类public class Man: IPerson{public void Say(){ Console.WriteLine(& 阅读全文

posted @ 2012-06-27 09:35 流星落 阅读(1723) 评论(0) 推荐(0) 编辑

C#接口-接口作为返回值
摘要:接口做为参数传递,传递的是实现了接口的对象; 接口作为类型返回,返回的是实现了接口的对象。using System;// IShape接口public interface IShape{// Area属性int Area{ get; set;}// Caculate计算方法void Caculate();}// Circle类继承IShapepublic class Circle: IShape{// area字段int area = 0;// 构造函数public Circle(int m_Area){ area = m_Area;}// Area属性public int Area{ get 阅读全文

posted @ 2012-06-27 09:35 流星落 阅读(1658) 评论(0) 推荐(0) 编辑

C#接口-经典实例
摘要:接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦定义了接口,就可以在类中实现它。这样,类就可以支持接口所指定的所有属性和成员。接口不能单独存在;不能进行实例化(因为没有必要实例化);接口不包括任何实现其成员的代码而只定义了成员本身;成员的实现将在实现接口的类中实现。以上是接口的书本定义,读完基本不知所云。就知道了接口与类不一样,接口与类都需要定义自身的成员,但接口不能实现成员的功能。我觉得可以简单地说:接口是类的更高级抽象(类已经是其所要实现的过程的抽象了),接口定义了类实现的规范。接口好像是事先定义好的备忘录,提醒你,类需要有这些成员,需要完成这些功能。但是,不同的类,他们 阅读全文

posted @ 2012-06-27 09:32 流星落 阅读(1226) 评论(0) 推荐(0) 编辑

C#接口-对接口理解实例代码
摘要:using System;public interface Iren{void eat();void sleep();}public class Xuesheng: Iren{public void eat(){ Console.WriteLine("我是一个学生,我去食堂吃饭");}public void sleep(){ Console.WriteLine("我是一个学生,我回寝室睡觉");}}public class Laoshi: Iren{public void eat(){ Console.WriteLine("我是一个老师,我回家 阅读全文

posted @ 2012-06-27 09:31 流星落 阅读(276) 评论(0) 推荐(0) 编辑

C#接口-对接口的理解
摘要:我是通过此文章理解了接口,觉得非常实用,借来一用。c#为什么要使用接口?通俗的讲,就是为了降低耦合度。给大家看一个我见过的很搞笑的例子。看看下面的程序:一个学校里边,有两种人:学生、老师。他们都要吃饭和睡觉。1publicinterface I人 2{3void 吃饭();4void 睡觉();5}6publicclass 学生:I人 7{8publicvoid 吃饭() 9{ //去食堂吃饭 } 10publicvoid 睡觉() 11{ //回寝室睡觉 } 12//其他特有方法,比如泡妞、打游戏 13}14publicclass 老师:I人 15{ 16publicvoid 吃饭() 17 阅读全文

posted @ 2012-06-27 09:30 流星落 阅读(418) 评论(0) 推荐(0) 编辑

C#接口-接口作用浅谈
摘要:继承“基类”和实现“接口”都能实现某些相同的功能,但有些接口能够完成的功能是只用基类无法实现的。1、接口用于描述一组类的公共方法和公共属性, 它不实现任何的方法或属性,只是告诉继承它的类至少要实现哪些功能,继承它的类可以增加自己的方法。2、使用接口可以使继承它的类: 命名统一规范,易于维护。比如: 两个类 “狗”和“猫”,如果它们都继承了接口“动物”,其中动物里面有个方法Behavior(),那么狗和猫必须得实现Behavior()方法, 并且都命名为Behavior。如果命名不是Behavior(),编译不会通过。3、提供永远的接口。当类增加时,现有接口方法能够满足继承类中的大多数方法,没必 阅读全文

posted @ 2012-06-27 09:29 流星落 阅读(349) 评论(0) 推荐(0) 编辑

C#接口-接口的实现
摘要:C#定义了接口后,就要在子类中实现。C#中通常把子类和父类的关系称为继承,子类和接口的关系称为实现。子类可以继承一个父类,可以实现多个接口。接口中不能定义构造函数,所以接口不能实例化。下面我们看例子:using System;public interface IChoose{void On();void Off();}public class TV: IChoose{private string _tvname = "长虹";public void On(){ Console.WriteLine("{0}电视打开了", this._tvname);}pu 阅读全文

posted @ 2012-06-27 09:29 流星落 阅读(451) 评论(0) 推荐(0) 编辑

C#接口-接口作用
摘要:C#接口是一个让很多初学C#者容易迷糊的东西,用起来好像很简单,定义接口,里面包含方法,但没有方法具体实现的代码,然后在继承该接口的类里面要实现接口的所有方法的代码,但没有真正认识到接口的作用的时候就觉得用接口是多此一举,当然你这样想那是绝对绝对错误的,比尔盖茨的微软请的员工都是比尔盖茨还聪明的人,他们的C#能添这样的多此一举吗?可简单的这样理解接口:接口是方法的抽象,如果不同的类有同样的方法,那么就应该考虑使用接口。 例如,人和车都有“跑”的方法,那么就可以定义一个接口IRun //注意,定义接口时,里面的方法不能有方法体 //应该在类里再去实现 //而具接口的成员全是公有的,不应有修饰符 阅读全文

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

C#接口-接口概述
摘要:C#不支持多重继承,但是客观世界出现多重继承的情况又比较多。为了避免传统的多重继承给程序带来的复杂性等问题,C# 提出了接口的概念。通过接口可以实现多重继承的功能。接口是单纯对事物行为的描述。例如,电器都有“开”和“关”两个行为,开关的作用在于打开或关闭电器,而开关的形式也是不一样的。电灯、电视、电扇,电冰箱各自完成的开关的动作也是不一样的,但是所有的电器都必须具有开和关的功能,这是一个规定,在程序设计中,这个规定就是接口。C#中接口的作用的什么?不是可以继承吗?为什么还要用借口?抽象类或实体类,只能单一继承,接口可以多继承。子类只能有一个基类,但子类可以实现几乎无数个接口。接口只包含行为定义 阅读全文

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

C#接口-接口定义
摘要:接口用来描述一种程序的规定,接口描述可属于任何类或结构的一组相关行为。实现接口的类或结构要与接口的定义严格一致。接口可由方法、属性、事件、索引器或这4种成员类型的任何组合构成。接口不能包含字段。接口成员一定是公共的。定义接口的语法如下:<访问修饰符> interface 接口名{//接口主体}下面定义一个开关的接口,代码如下:public interface IChoose{void On();void Off();}定义接口时要遵循的编码标准如下:1、接口名称必须使用大写字母“I”开头,如Icompute,IChoose。定义接口时必须注意以下内容:2、接口的访问修饰符可以选择使 阅读全文

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

C#多态性-抽象类对象引用子类实例
摘要:C#规定,抽象类不能实例化,如下代码会发生编译错误:Animal myanimal=new Animal();那么如下代码正确吗?Animal myanimal=new Dog();myanimal.Cry();这段代码是完全正确的。既然抽象类不能实例化,那么这段代码为什么又可以运行呢?首先要明确上面的代码并没有实例化抽象类,只是声明了一个抽象类的对象myanimal,实例化时必须通过构造函数来实现,这里调用的是子类的构造函数,所以实例化的是子类对象,只是抽象类对象引用了子类实例。那么这个对象是子类还是父类呢?using System;public abstract class Animal{ 阅读全文

posted @ 2012-06-27 09:26 流星落 阅读(1423) 评论(0) 推荐(0) 编辑

C#多态性-抽象类和抽象方法的使用
摘要:定义抽象类和抽象方法的目的就是为子类提供一种规定,约束子类的行为。C#通过方法重写来实现抽象方法。当一个抽象基类派生一个子类时,子类将继承基类的所有特征,重新实现所有抽象方法。在子类中实现基类的抽象方法,是使用override关键字来重写基类方法。语法如下:访问修饰符 override 返回类型 方法(){//方法体}重写抽象方法和重写虚拟方法是一样的。不同的是在基类一种是虚拟方法,另一种是抽象方法。通过override关键字可以在子类中重写方法,这样每种动物的叫声不相同了。抽象类和抽象方法的作用:using System;public abstract class Animal{public 阅读全文

posted @ 2012-06-27 09:25 流星落 阅读(329) 评论(0) 推荐(0) 编辑

C#多态性-抽象类和抽象方法概述
摘要:如果继承是面向对象设计理论的基石,那么抽象理论和方法就是继承理论的顶梁柱。在汉语词典中抽象是这样解释的:将几个有区别的物体的共同特性或形象抽取出来或孤立地进行考虑的行动或过程。可以看出,抽象就是从事物中提取特征和性质,并不是事物本身。具体应该如何理解呢?大家都知道,学生有一个共同的特征是必须学习,那么学什么,如何学,每一个学生就不一样了。这样可以提取学习这个动作为抽象方法,而不考虑具体内容。动物类都有叫的动作,具体动物如何叫,暂不考虑,先把共性提取出来。简单地说,用来描述这些共性的类就是抽象类,抽象类中不考虑具体实现,只确定必须具有的行为,就是抽象方法。抽象方法是一个没有实现的方法,使用关键字 阅读全文

posted @ 2012-06-27 09:24 流星落 阅读(252) 评论(0) 推荐(0) 编辑

C#多态性-抽象类的特点
摘要:1、声明一个抽象方法使用abstract关键字。2、一个类中可以包含一个或多个抽象方法。3、抽象类中可以存在非抽象的方法。4、抽象类不能被直接被实例化。5、实现抽象类用“:”(冒号),实现抽象方法用override关键字。6、抽象类可以被抽象类所继承,结果仍是抽象类。7、抽象方法被实现后,不能更改修饰符。 using System; public abstract class Person { public abstract void SayHello(); public void about() { Console.WriteLine("Abstract D... 阅读全文

posted @ 2012-06-27 09:24 流星落 阅读(309) 评论(0) 推荐(0) 编辑

C#多态性-利用虚拟方法来实现多态
摘要:我们看一个例子,假若有一个动物类,类中用方法cry()描述动物的叫声,不同的动物的叫声是不一样的。根据继承的特征,把类中公共部分的内容放在父类中,那么cry()方法就应该放在父类中,根据这样的思路编写程序如下:using System;class Anmial{public void Cry(){Console.WriteLine("这是动物的叫声");}}class Dog: Anmial{public void Run(){ Console.WriteLine("狗路得快");}}class Cat: Anmial{public void Look( 阅读全文

posted @ 2012-06-27 09:23 流星落 阅读(328) 评论(0) 推荐(0) 编辑

C#重载和重写的区别
摘要:重载就是在同一个类中,方法名相同,参数列表不同。参数列表不同包括:参数的个数不同,参数类型不同等。重载特征: I.方法名必须相同 II.参数列表必须不相同,与参数列表的顺序无关 III.返回值类型可以不相同用于在给定了参数列表和一组候选函数成员的情况下,选择一个最佳函数成员来实施调用。 public void test(int x,int y){} public void test(int x,ref int y){} public void test(int x,int y,string a){}重写就是子类重写父类的方法,在调用的时候,子类的方法会覆盖父类的方法,也就是会调用子类的方法。在 阅读全文

posted @ 2012-06-27 09:22 流星落 阅读(294) 评论(0) 推荐(0) 编辑

C#多态性-什么是多态
摘要:下面举一个生活的例子来理解多态。如果要求3种人——孩子,运动员,音乐演奏者都执行一个动作“play”,会发生什么情况呢?孩子会出去玩耍。运动员会比赛。演员开始演奏。对于同一个命令,不同的人会有不同的反应,执行不同的动作,这就是生活中一个多态。在程序设计中,对于同一个方法,由于执行的对象不同,方法的内容也就不同。执行的结果也是不相同的。同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。多态性通过派生类覆写基类中的虚函数型方法来实现。多态性分为两种,一种是编译时的多态性,一种是运行时的多态性。编译时的多态性:编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编 阅读全文

posted @ 2012-06-27 09:21 流星落 阅读(958) 评论(0) 推荐(0) 编辑

C#怎么理解“父类引用指向子类对象”
摘要:父类代码如下:public class Person{//父类的构造函数public Person(){Console.WriteLine("Person");}//父类的虚方法public virtual void virFun(){Console.WriteLine("Person's Fun");}}子类代码如下:public class Son1:Person//继承{//子类Son1的构造方法public Son1(){Console.WriteLine("Son1");}//重写父类的虚方法public overr 阅读全文

posted @ 2012-06-27 09:20 流星落 阅读(695) 评论(0) 推荐(0) 编辑

父类对象引用子类实例-父母代表孩子做事
摘要:子类继承父类的属性和方法,使创建子类变得很简单,实现了代码重用。继承还有一个重要的特性,父类对象可以引用子类实例。也就是子类实例可以赋值给父类的对象变量。这个特性可以这样理解:儿子继承父亲,儿子又把管理自己事务的权利交给父亲,那么父亲就可以代表儿子处理事务,这就是父类对象引用子类实例。现在生活中,父母可以代表儿子处理事务,总公司可以代表子公司生命权利。父类指针要访问子类的成员的情况下,要强制类型转换。父类的对象变量=new 子类类型;((子类类型)父类引用).子类变量using System;class Father{private int _wealth = 5000;public void 阅读全文

posted @ 2012-06-27 09:19 流星落 阅读(1186) 评论(0) 推荐(0) 编辑

C#中调用父类的构造方法和成员
摘要:C#中使用的关键字是base,但用法不完全相同。1. 调用父类的构造方法// 父类 public class Father { public Father(String name) { this.name = name; } private String name; } // 子类 public class Son:Father { public Son(String name) : base(name) { } }注意:如果没有第14行“:base(name)”,编译器将报告错误:“Father”不包含采用“0”参数的构造函数。因为默认隐式调用父类不带参数的构造方法,而Fat... 阅读全文

posted @ 2012-06-27 09:18 流星落 阅读(4385) 评论(0) 推荐(0) 编辑

C#中base关键字-调用父类成员
摘要:C#中base关键字在继承中起到非常重要的作用。它与this关键字相比,this关键字代表当前实例。base关键字代表父类,使用base关键字可以调用父类的构造函数、属性和方法。使用base关键字调用父类构造函数的语法如下:子类构造函数:base(参数列表)使用base关键字调用父类方法的语法如下:base.父类方法();using System ;class Teacher//老师类{public Teacher()//构造函数1 { Console.WriteLine ("我是一位教师。"); }public Teacher(string str)//构造函数2 { C 阅读全文

posted @ 2012-06-27 09:17 流星落 阅读(3652) 评论(0) 推荐(0) 编辑

C#中this关键字-调用本类成员
摘要:关键字this有两种基本的用法,一是用来进行this访问,二是在声明构造函数时指定需要先执行的构造函数。一、this访问在类的实例构造函数和实例函数成员中,关键字this表示当前的类实例或者对象的引用。this不能用在静态构造函数和静态函数成员中,也不能在其他地方使用。当在实例构造函数或方法内使用了与字段名相同的变量名或参数名时,可以使用this来区别字段和变量或者参数。下面的代码演示了this的用法。public class Dog{ public string name; public int age; public Dog() { } public Dog(string name) // 阅读全文

posted @ 2012-06-27 09:17 流星落 阅读(2510) 评论(0) 推荐(0) 编辑

C#设置访问权限
摘要:在C#中有一个规定:编译器不允许派生类的可访问性比其基类更高。也就是说,内部类可以继承于一个公共类,但公共类不能继承于一个内部类。1、public 关键字是类型和类型成员的访问修饰符。公共访问是允许的最高访问级别。对于访问公共成员没有限制。有关 public 与其他访问修饰符的比较,请参见可访问性级别。示例在下例中,声明了两个类:MyClass1 和 MyClass2。直接从 MyClass2 访问 MyClass1 的公共成员 x 和 y。// protected_public.cs// Public accessusing System;class MyClass1 { public in 阅读全文

posted @ 2012-06-27 09:16 流星落 阅读(738) 评论(1) 推荐(0) 编辑

默认构造函数的作用(“A”方法没有采用“0”个参数的重载
摘要:构造函数主要用来初始化对象。它又分为静态(static)和实例(instance)构造函数两种类别。大家应该都了解如何来写类的构造函数,这里只说下默认构造函数的作用,以及在类中保留默认构造函数的重要性。实际上,我说错了。正确的说法是:以及在类中保留空参数构造函数的重要性。我们来写一个类A,代码如下:public class A{ public int Number; //数字 public string Word; //文本}//在Test类中实例化public class Test{ static void Main(){ A a = new A(); //实例化,A()即为类A的默认构造函 阅读全文

posted @ 2012-06-27 09:15 流星落 阅读(538) 评论(0) 推荐(0) 编辑

C#继承中访问修饰符的区别
摘要:继承中访问修饰符的区别一、public 类内部可以,子类可以,其他类可以。二、private 类内部可以,子类和其他类都不可以。三、protected 类内部和子类可以,其他类不可以。四、internal 类声明为内部的,即只有当前工程中的代码才能访问它。父类中的成员如果用public修饰,任何类都可以访问;如果用private修饰,它将作为私有成员,只有类本身可以访问,其他任何类都无法访问。在C#中,使用protected修饰符的成员可以被其子类访问,而不允许其他非子类访问。父类中只有被“public”,“protected”,“internal”修饰的成员才可以被继承。这些成员包括父类的字 阅读全文

posted @ 2012-06-27 09:15 流星落 阅读(816) 评论(0) 推荐(0) 编辑

C#中构造函数不是不能被继承吗?为什么以下的构造函数先执行?
摘要:using System;public class ParentClass{public ParentClass(){ Console.WriteLine("父类构造函数。");}public void print(){ Console.WriteLine("I'm a Parent Class。");}}public class ChildClass: ParentClass{public ChildClass(){ Console.WriteLine("子类构造函数。");}public void print(string 阅读全文

posted @ 2012-06-27 09:14 流星落 阅读(824) 评论(0) 推荐(1) 编辑

C#继承与构造函数的调用
摘要:1、实例化父类时,可以使用new子类,执行构造函数顺序为:先执行父类构造函数,再执行子类构造函数。2、实例化子类时,只可以new子类,执行顺序同上。3、父类实例化后,只能执行父类的方法,获得父类的属性等。4、实例化子类后,可同时执行子类和父类的方法和属性,如同名方法,则执行子类的方法。我们看以下的代码: public class A { public A(string a) { } } public class B:A { public B() { } }这段代码编译后,会有个错误提示:A does not contain a constructor that takes '0' 阅读全文

posted @ 2012-06-27 09:12 流星落 阅读(4643) 评论(0) 推荐(1) 编辑

C#继承的特性
摘要:C#继承的特性面向对象的程序设计技术引入了继承的概念。一个类从另一个类派生出来时,派生类从基类那里继承特性。C#中,派生类从它的直接基类中继承成员:方法、域、属性、事件、索引指示器。除了构造函数和析构函数,派生类隐式地继承了直接基类的所有成员。一、继承的传递性派生类从基类那里继承特性。派生类也可以作为其它类的基类。从一个基类派生出来的多层类形成了类的层次结构。就像现在中爷爷,爸爸和儿子的关系。儿子不仅可以访问父类爸爸的所有公有属性方法,也可以访问爷爷的所有公有属性和方法,这种关系称为继承传递性。二、继承的单一性继承的单一性是指子类只能继承一个父类,不能同时继承多个父类。C#中,派生类只能从一个 阅读全文

posted @ 2012-06-27 09:05 流星落 阅读(3054) 评论(0) 推荐(0) 编辑

C#构造函数在继承过程中的执行顺序
摘要:using System;class Program { static void Main(string[] args) { childTest test = new childTest(); childTest test1 = new childTest(2); childTest test2 = new childTest(2, 3); Console.Read(); } } class baseTest { public baseTest() { Console.WriteLine("父类构造函数"); } public baseTest(int i) { Conso 阅读全文

posted @ 2012-06-27 09:04 流星落 阅读(682) 评论(0) 推荐(0) 编辑

C#继承使用实例
摘要:继承是面向对象编程最重要的特性之一。任何类都可以从另外一个类继承,这就是说,这个类拥有它继承的类的所有成员。在面向对象编程中,被继承的类称为父类或基类。在C#中提供了类的继承机制,但只支持单继承,而不支持多重继承,即在C#中一次只允许继承一个类,不能同时继承多个类。说明:继承类时,需要使用冒号加类名。创建派生类的语法如下:<访问修饰符> class 派生类名:基类名{//类代码块}下面通过实例来介绍类的继承性在实际中的应用using System;public class Class1 { public void outMethod() { Console.WriteLine(&q 阅读全文

posted @ 2012-06-27 09:03 流星落 阅读(644) 评论(0) 推荐(0) 编辑

C#类的继承-什么是继承
摘要:为了能够合理描述自然界的规律,面向对象的编程引入了继承的概念,它是面向对象编程中最重要的概念之一,定义了如何根据现有类创建新类的过程。任何类都可以从另外一个类继承,遵循的原则是:一个类派生出来的子类具有这个类所有的公共属性和方法。C#提供了类的继承机制,创建新类所根据的基础类称为基类或父类,新建的类称为派生类或子类。继承是实现代码重用的重要机制。使用继承可以不需要从头开始创建新类,可以在现有的基础上添加新的方法和属性,节约时间和精力,大大提高效率。同类事物具有共同性,在同类事物中,每个事物又具有其特殊性。运用抽象的原则舍弃对象的特殊性,抽取其共同性,则得到一个适应于一批对象的类,这便是基类(父 阅读全文

posted @ 2012-06-27 09:02 流星落 阅读(1407) 评论(0) 推荐(0) 编辑

C#对象初始化器
摘要:在C# 3.0中增加了一个名为"对象初始化器"(object initializer)的特性 ,它能初始化一个对象中的所有允许访问的字段和属性。具体地说,在创建对象的构造器调用之后,你现在可以增加一对大括号,并在其中添加一个成员初始化列表。每个成员的初始化操作都是一个赋值操作,等号左边是一个允许访问的字段属性,右边则是具体要赋的值。创建一个Student对象,通过其属性初始化对象,通常都这样实现。Student str=new Student();stu.Name="张三";stu.Sex="男";stu.Age="25&q 阅读全文

posted @ 2012-06-27 09:01 流星落 阅读(443) 评论(0) 推荐(0) 编辑

C#自动属性及属性的简写形式
摘要:属性是一个非常有用的技术,以C#应用广泛。我们采用手动输入费时费力。vs2008提供了一种快速创建属性的方式,重构/封装字段。首先在一个类中定义一个私有字段,选择这个字段,右击此字段,在弹出的快捷菜单中选择“重构”——“封装字段”命令。在单击“封装字段”后,在“属性名”文本框中可以修改属性名称,默认是将字段名首字母大写,一般不需要修改,然后单击“确定”按钮。using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Example_TestPro{ class Stude 阅读全文

posted @ 2012-06-27 09:00 流星落 阅读(691) 评论(0) 推荐(0) 编辑

C#使用属性
摘要:我们通常把字段定义为私有的,属性定义为公共的,通过属性访问字段。定义一个属性时,类型必须和它所访问的字段一致。例如:姓名_name为string类型,那么它对应的属性Name也一定是string类型。注意:属性不是必须和字段相关联的,但是没有字段单独定义属性没有任何意义。属性定义时属性名后边没有小括号,set{}和get{}访问器也都是大括号,不是小括号。属性本质上是方法,只是与方法不同。可以实例化对象后给属性赋值,也可以取值,只调用属性即可。不需要访问其中的访问器。using System;class User{//设为私有的private string name;private strin 阅读全文

posted @ 2012-06-27 08:58 流星落 阅读(236) 评论(0) 推荐(0) 编辑

C#定义属性-静态属性
摘要:C#静态属性可以是读写属性,只读属性,只写属性中的任意一种。也就是说,静态属性可以同时包含set访问器和get访问器,也可以只包含其中一种。静态属性定义方式就是在属性前加static关键字,语法如下:<访问修饰符> static 数据类型 属性名{get{}set{}}静态访问器适用于整个类,而不是类的实例。静态属性中的set{},get{}访问器只能访问类的静态成员。静态属性可以通过类名访问,不能使用实例调用,这与静态方法相同。 阅读全文

posted @ 2012-06-27 08:57 流星落 阅读(1309) 评论(0) 推荐(0) 编辑

C#定义属性-只写属性
摘要:只有set访问器的属性为只写属性,此属性不定义get访问器。语法如下:<访问修饰符> 数据类型 属性名{set{}}定义了只写属性,就只能通过该属性赋值,而不能取值。private int _sex;public int Sex{set{ _sex=value;} 阅读全文

posted @ 2012-06-27 08:55 流星落 阅读(989) 评论(0) 推荐(0) 编辑

C#定义属性-只读属性
摘要:只有get访问器的属性为只读属性,此属性不定义set访问器。语法如下:<访问修饰符> 数据类型 属性名{get{}}定义了只读属性,就只能通过该属性取值,而不能赋值。private int _age;public int Age{get{ return _age;} 阅读全文

posted @ 2012-06-26 13:24 流星落 阅读(1469) 评论(0) 推荐(0) 编辑

C#属性简介
摘要:我们知道,类成员包括变量和方法。如果希望其他类能够访问成员变量的值,就必须定义成公有的,而将变量设为公有public,那这个成员变量的就可以被任意访问(包括修改,读取),这样不利于数据安全。那怎么办呢?C#通过属性特性读取和写入字段(成员变量),而不直接直接读取和写入,以此来提供对类中字段的保护。属性可用于类内部封装字段。属性是C#面向对象技术中封装性的体现。注意:字段就是类的成员变量,为配合属性而这样称呼的。属性和字段的区别: 属性是逻辑字段;属性是字段的扩展,源于字段;属性并不占用实际的内存,字段占内存位置及空间。 属性可以被其它类访问,而大部分字段不能直接访问。属性可以对接收的数据范围作 阅读全文

posted @ 2012-06-26 13:23 流星落 阅读(218) 评论(0) 推荐(0) 编辑

C#定义属性-读写属性
摘要:通常属性包括get{}访问器和set{}访问器。get{}访问器用来返回相应的私有字段的值,用return来返回。set{}访问器用来设定相应字段的值,相当于一个隐含的输入参数,采用value来赋值。读写属性:读写属性是同时包括get访问器和set访问器的属性,get访问器定义对数据访问,set访问器定义对数据的读取。语法如下:<访问修饰符> 数据类型 属性名{get{}set{}}private string _name;public string Name{get{ return _name;}set{ _name = value;}通俗的讲,具有读写属性的字段,可以通过属性赋 阅读全文

posted @ 2012-06-26 13:23 流星落 阅读(929) 评论(0) 推荐(0) 编辑

C#中this关键字的使用
摘要:保留字this仅限于在构造函数、类的方法和类的实例中使用,它有以下含义:●在类的构造函数中出现的this作为一个值类型,它表示对正在构造的对象本身的引用。●在类的方法中出现的this作为一个值类型,它表示对调用该方法的对象的引用。●在结构的构造函数中出现的this作为一个变量类型,它表示对正在构造的结构的引用。●在结构的方法中出现的this作为一个变量类型,它表示对调用该方法的结构的引用。除此之外,在其它地方使用this保留字都是不合法的。比如在一个AAA类里有一个aaa的变量在这个AAA类中调用这个aaa变量就可以用this.aaa如果是在别的类中就要实例化一个对象来调用这个变量AAA a= 阅读全文

posted @ 2012-06-26 13:22 流星落 阅读(204) 评论(0) 推荐(0) 编辑

C#中的结构体要使用new来实例化吗?
摘要:声明结构的默认(无参数)构造函数是错误的。总是提供默认构造函数以将结构成员初始化为它们的默认值。在结构中初始化实例字段也是错误的。如果使用 new 运算符创建结构对象,则会创建该结构对象,并调用适当的构造函数。与类不同,结构的实例化可以不使用 new 运算符。如果不使用 new,则在初始化所有字段之前,字段都保持未赋值状态且对象不可用。结构类型使用new不会分配托管堆分配内存而是调用构造函数初始化字段。结构的构造函数要么是有参数的,不可能是无参数,应为无参数是系统自己隐式添加的,就算有另外的构造函数,如果你显示的声明一个无参数的构造函数在结构里,将导致编译错误。结构体如果不用new初始化,也可 阅读全文

posted @ 2012-06-26 13:20 流星落 阅读(2216) 评论(0) 推荐(0) 编辑

C#数据类型-结构类型
摘要:有时我们可能对同一事物使用多个不同的变量来描述,如果将其分开来,显得不够灵活。结构类型很好的解决了这个问题,它把多个不同的变量组织在一起。结构和类有很多相同的地方,结构可以看成一个轻量的类。结构使用struct关键字定义。其定义方法如下:struct 结构名称 { 成员声明列表; }成员可以包含构造函数,常数,字段,方法,属性,索引器,运算符和嵌套类型等。每个成员在声明的时候都采用如下的格式:访问修饰符 类型 名称;using System;struct Teacher{public string Name; // 老师姓名public uint Age; // 老师年龄public stri 阅读全文

posted @ 2012-06-26 13:19 流星落 阅读(624) 评论(0) 推荐(0) 编辑

C#构造函数的重载
摘要:C#中的构造函数也可以应用方法重载。C#中有默认构造函数,也可以定义带参数的构造函数。构造函数必须与类同名,并且不能有返回值。所以C#构造函数重载相当于不同数量的参数方法重载。using System;class Animal{public string _name;public string _color;public int _speed;public Animal(){ this._speed = 30;}public Animal(string name, string color){ this._name = name; this._color = color;}public Ani 阅读全文

posted @ 2012-06-26 13:18 流星落 阅读(1077) 评论(0) 推荐(1) 编辑

C#方法参数个数和类型相同,名称不同,可以实现重载吗
摘要:比如说:(1)public void add(int i){}(2)public void add(int i,int j){}(3)public void add(int a){}(4)public void add(double i,int j){}1和2算重载因为那个数不同。2和4也算重载因为类型不同。那1和3算不算重载?他们的名字不同??这不能通过编译。因为1和3本质是一样的两个方法,参数的名称本质只是在方法内部的一个变量的标识,重载只与参数类型和参数个数有关。如果有多个参数,那么如果这些参数的类型不同就要考虑参数位置了。例如:public void print(int a,Strin 阅读全文

posted @ 2012-06-26 13:17 流星落 阅读(970) 评论(0) 推荐(0) 编辑

C#方法重载-基于不同类型的参数的方法重载
摘要:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication7{ class Test { static void Main(string[] args) { Test ts = new Test(); Console.WriteLine("两个数最大的数是:{0}",ts.MaxNum(12, 33)); Console.WriteLine("三个数最大的数是:{0}", ts.MaxNum(1 阅读全文

posted @ 2012-06-26 13:16 流星落 阅读(456) 评论(0) 推荐(0) 编辑

C#只能靠参数而不能靠返回值类型的不同来区分方法重载
摘要:重载必须要用参数来区分,传入不同参数,可以实现重载。可以这样理解,你调用一个方法,如果有多个方法同名,系统必须要知道到底你要调用哪一个,参数可以帮助系统在方法入口处得到答案,他根据你给的参数就知道该将哪个方法的入口调入栈中。如果只有返回值的不同,很多情况系统是不可能得到有效的判断条件的。比如:string method(); int method();上面两个方法,第一个返回字符串类型值,第二个的返回值是整数类型。如果你这样调用:method();在这种情况下,编译器和程序员都不知道哪个method方法被调用。 阅读全文

posted @ 2012-06-26 13:16 流星落 阅读(856) 评论(0) 推荐(0) 编辑

C#方法重载-基于不同数量的参数的方法重载
摘要:在日常生活中,有些行为具有相同的名称,但是可以执行不同的操作,我们经常去商场买东西,虽然都是购物,每次执行这个任务时购买的物品,付款多少,购买过程都是不同的,所以虽然任务相同,但每次处理的数据是不同的。在C#中用重载方法执行类似功能。方法重载的定义:多个方法具有相的的名称,但是对不同数据执行相似的过程。C#中的方法重载包括基于不同数量的参数方法重载和基于不同类型的参数方法重载。1、基于不同数量的参数的方法重载using System;class Class1{int numberone(int num1, int num2){ Console.WriteLine("{0}和{1}中较 阅读全文

posted @ 2012-06-26 13:14 流星落 阅读(1500) 评论(0) 推荐(0) 编辑

C#静态方法不能使用this关键字
摘要:实例方法比静态方法多传递一个隐含的指针参数,该指针指向该方法所从属的已被实例化的对象。这一区别的外在表现为实例方法内可使用this关键字代表所从属的实例对象,而静态方法不可使用this因为静态方法不针对任何实例对象。实例对象调用静态方法会因参数中多出一个指向自己的指针(this)而发生错误。 定义静态方法只需加注static关键字即可。静态方法独立于对象实例之外,与对象是否已被实例化无关,调用静态方法要用类定义的名称而不能用实例名称如: class a { ... public static void b(){}//静态方法 public void d(){}//实例方法 } a c = ne 阅读全文

posted @ 2012-06-26 13:12 流星落 阅读(867) 评论(0) 推荐(0) 编辑

c#静态方法不可以直接调用实例方法
摘要:静态方法是一种特殊的成员方法,它不属于类的某一个具体的实例。非静态方法可以访问类中的任何成员,而静态只能访问类中的静态成员。看这个例子:class A{int x;static int y;static int F(){x=1; //错误,不允许访问y=2; //正确,允许访问}在这个类定义中,静态方法F()可以访问类中静态成员y,但不能访问非静态成员x。这是因为,x作为非静态成员,在类的每个实例中都占有一个存储(或者说具有一个副本),而静态方法是类所共享的,它无法判断出当前的x是属于哪个类的实例,所以不知道应该到内存的哪个地址去读取当前x的值。而y是静态成员,所有类的实例都公用一个副本,静态 阅读全文

posted @ 2012-06-26 13:11 流星落 阅读(1236) 评论(0) 推荐(0) 编辑

C#静态方法
摘要:静态方法与静态变量一样,属于类本身,而不属于那个类的一个对象。要想调用一个被定义为static的方法,必须在它前面加上这个类的名称。其中static关键字即表示静态的。声明静态方法的语法如下:<访问修饰符> static 返回类型 方法名(参数列表){//方法体}静态方法与实例方法唯一不同的,就是静态方法在返回类型前加static关键字。静态方法的调用语法如下:类名.静态方法名(参数值);我们在使用时要注意:静态方法只能访问类的静态成员,不能访问类的非静态成员;非静态方法可以访问类的静态成员,也可以访问类的非静态成员;静态方法不能使用实例来调用,只能使用类名来调用。using Sy 阅读全文

posted @ 2012-06-26 13:06 流星落 阅读(556) 评论(0) 推荐(0) 编辑

C#静态变量
摘要:在C#程序中,没有全局变量的概念,这意味着所有的成员变量只有该类的实例才能操作这些数据,这起到了“信息隐藏”的作用。但有些时候,这样做却不是个明智的选择。假设我们要定义一个图书类,要求该类能保存图书的数量,即每增加一本图书(定义一个实例),图书的数量应该加1。如果没有静态变量,我们需要将图书的数量保存在每本图书(实例)里,然而,这样的变量要在不同图书(实例)里重复存储,图书(实例)数量少的话,我们还能接受,如果图书(实例)数量较多的话,比如成千上万,我们无法想象这要造成多少资源(如内存、磁盘空间)的浪费,更让人无法忍受的是:因为图书(实例)的数量要保存在每本图书(实例)里,该值肯定是不同的。要 阅读全文

posted @ 2012-06-26 13:04 流星落 阅读(517) 评论(0) 推荐(0) 编辑

C#类方法中使用数组参数params关键字的作用
摘要:参数数组(params)关键字可以指定在参数数目可变处采用参数的方法参数。在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字。先定义一个带有参数数组的方法:public void UseParams(params int[] list) { for (int i = 0 ; i < list.Length; i++) { Console.Write(list[i] + " "); } Console.WriteLine(); }可通过以下两个方法调用:① UseParams(1,2,3)② int[] myar 阅读全文

posted @ 2012-06-26 13:03 流星落 阅读(344) 评论(0) 推荐(0) 编辑

C#方法参数传递-输出参数out关键字
摘要:out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化,out关键字不要求调用代码前对传递的参数进行初始化,也可以实现引用传递。若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。采用这种方法调用代码时,就可看到修改后的值。输出参数(Out Parameter)格式:方法名称(out 参数类型 参数名称[,out 参数类型 参数名称])using System;class OutExample{ static void Method(out int i) { i = 44; } static void Ma 阅读全文

posted @ 2012-06-26 13:02 流星落 阅读(672) 评论(0) 推荐(0) 编辑

C#方法参数传递-同时使用ref和out关键字
摘要:在方法参数传递中,可以同时使用ref和out关键字,但是要注意ref和out参数传递的不同。using System;class Program{static void Main(){ Program obj = new Program(); int score = 55; //声明原来分数 int refscore, outscore; //声明两个变量 obj.ChangeScore(score, ref refscore, out outscore); Console.WriteLine("您原来的分数是{0},调整后的分数为{1},加平时表现分后{2}", scor 阅读全文

posted @ 2012-06-26 13:02 流星落 阅读(3188) 评论(0) 推荐(0) 编辑

C#方法参数传递-引用参数ref关键字
摘要:引用传递好比你把文件在网络上的地址告诉他人,他人通过网络访问你计算机的文件,他可以对文件进行修改并保存,此时,文件的内容就会发生变化。引用传递在方法调用之后,可以保留参数值的修改。要实现引用传递,C#通过ref关键字和out关键字来实现。引用参数(Reference Parameter )格式:方法名称(ref 参数类型 参数名称[,ref 参数类型 参数名称])ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。using System;class Prog 阅读全文

posted @ 2012-06-26 13:01 流星落 阅读(999) 评论(0) 推荐(0) 编辑

C#方法参数传递-值传递
摘要:c#常用的参数传递有两种方式:值传递和引用传递。什么是值传递呢?就是把参数值放在方法中,在方法中对参数值做了修改,但是在方法调用之后,参数值还是原来的值。值传递好比把文件复制一份,通过网络传给别人,然后他可以在他的计算机上对文件做各种修改,修改会保存下来,但是你的计算机上的文件不会发生任何变化。值传递参数(Value Parameter )格式:方法名称(参数类型 参数名称[,参数类型 参数名称])using System;class Program{static void Main(string[]args){ int num1 = 4; int num2 = 8; Console.Writ 阅读全文

posted @ 2012-06-26 13:00 流星落 阅读(722) 评论(0) 推荐(0) 编辑

C#中return语句的使用方法
摘要:C#中return语句的使用方法return语句终止它所在的方法的执行,并将控制权返回给调用方法,另外,它还可以返回一个可选值。如果方法为void类型,则可以省略return语句。return语句后面可以是常量,变量,表达式,方法,也可以什么都不加。return语句可以出现在方法的任何位置。一个方法中也可以出现多个return,但只有一个会执行。当return语句后面什么都不加时,返回的类型为void。下面代码演示retrun语句:return 1;return a;return a+b;return Add(a+b);return;下面编写方法计算长方形面积:用构造函数初始化对象,输出计算结 阅读全文

posted @ 2012-06-26 12:59 流星落 阅读(5143) 评论(0) 推荐(0) 编辑

C#方法的调用
摘要:C#方法调用步骤如下:1、实例化方法的类,创建对象。Dog objdog=new Dog();2、用对象名.方法名(参数)调用方法objdog.方法名(参数);方法调用实例一:在一个类中编写两个整型数据相加,返回和的方法,在另一个类中调用该方法。using System;class Accept{public int Add(int a, int b){ return a + b;}public void Show(int sum){ Console.WriteLine("两个数相加的和为{0}", sum);}}class Program{static void Main 阅读全文

posted @ 2012-06-26 12:58 流星落 阅读(675) 评论(0) 推荐(0) 编辑

C#析构函数-销毁对象
摘要:析构函数和构造函数刚好相反,构造函数在创建对象时使用,而析构函数在销毁对象时使用。程序中每次创建一个对象都要占有一定的系统资源,实时销毁无用的对象,释放资源才能够保证系统的运行效率。C#中运用垃圾回收器来实现这个功能。当应用程序中的对象失去作用时,垃圾回收器自动调用析构函数释放资源。声明析构函数的语法如下:~<类名>(){ // 析构函数的主体 }使用析构函数时要注意以下几点:析构函数声明方式与构造函数的相同只是在类名前加个(~)符号。一个类只能有一个析构函数。析构函数不能继承和重载。析构函数不能显式或手动调用,只有在该类被销毁的时候调用。析构函数不接受任何参数,不带任何访问修饰符 阅读全文

posted @ 2012-06-26 12:57 流星落 阅读(1016) 评论(0) 推荐(0) 编辑

C#方法
摘要:C#的主要成员除了成员变量之外,还有方法。方法用来描述对象的行为,由一组完成特定功能的语句组成。方法是程序设计的组成元素,没有方法的程序是没有意义的。Main()函数,就是C#提供的方法。方法的声明C#中声明方法的语法如下:<访问修饰符> 返回类型 方法名(参数列表){//方法体}1、访问修饰符:方法的访问修饰符和成员变量的访问修饰符相同。方法名称前没有任何访问修饰符时,系统默认为private类型。2、方法返回值:定义方法的目的是完成一定的功能。定义好的方法提供给别人来调用,调用后就会有一个结果产生,那个结果就是方法的返回值。方法的返回值类型可以是任意数据类型,也可以是对象类型, 阅读全文

posted @ 2012-06-26 12:57 流星落 阅读(210) 评论(0) 推荐(0) 编辑

C#带参数的构造函数
摘要:构造函数可以没有参数,也可以包含一个以上的参数,带参数的构造函数用于初始化成员变量,在实例化类时完成初始化的过程。其语法如下:class 类名{<访问修饰符> 类名 (参数列表){//构造函数主体}}访问带参数的构造函数如下:类名 对象名=new 类名(参数值);using System;class Dog{public string type;public string color;public Dog(string strtype, string strcolor){ this.type = strtype; this.color = strcolor;}}class Prog 阅读全文

posted @ 2012-06-26 12:56 流星落 阅读(3218) 评论(0) 推荐(0) 编辑

C#不同类型的成员变量(字段)的默认值
摘要:创建类的一个实例时,在执行构造函数之前,如果你没有给成员变量赋初始值,C#编译器缺省将每一个成员变量初始化为他的默认值。如果变量是方法的局部变量,编译器就会认为在使用该变量之前,代码必须给它显示的设定一个值。否则会发生“使用了未赋值的局部变量”的错误。对于其他情况,编译器会在创建变量时,把变量初始化为默认值。1、对于整型、浮点型、枚举类型(数值型),默认值为0或0.0。2、字符类型的默认值为\x0000。3、布尔类型的默认值为false。4、引用类型的默认值为null。如果声时变量时,为它指定了初始值(int i=10;),那么这个值就用于初始化该变量了。虽然C#编译器为每个类型都设置了默认类 阅读全文

posted @ 2012-06-26 12:55 流星落 阅读(1449) 评论(0) 推荐(0) 编辑

C#构造函数-创建对象
摘要:构造函数(constructor)用于执行类的实例的初始化。每个类都有构造函数。C#中通过new关键字创建对象的过程其实就是通过new关键字调用类的构造函数的过程。创建对象时,必须调用构造函数,如果没有定义构造函数,系统会提供一个默认的构造函数。在访问一个类的时候,系统将最先执行构造函数中的语句,任何构造函数的执行都隐式的调用了系统提供的默认构造函数base(),可以有参数,也可以没有。有参数的时候,类在实例化的时候必须传递参数。构造函数是类中的特殊方法,C#使用构造函数来初始化变量。创建构造函数的语法如下:class 类名{<访问修饰符> 类名(){//构造函数主体}}构造函数的 阅读全文

posted @ 2012-06-26 12:52 流星落 阅读(1263) 评论(0) 推荐(0) 编辑

C#实例化类的详细介绍
摘要:我们定义一个类后,就必须实例化才给使用。实例化就是创建一个对象的过程。在C#中,我们使用new运算符关键字来创建。类 对象=new 类();即 class object=new class();这样就生成了一个对象。比如有一个类叫汽车。你现在想在程序中买一辆,所以你用new来买了一辆汽车,这辆车你得给你找个名字,比如宝马。呵呵所以就成汽车 宝马 = new 汽车你有钱了,你要再来一辆:汽车 奔驰 = new 汽车 但他们都有汽车该有的东西:四个轮子,一个方向盘,发动机,车门。所以都是汽车一类的东西。C#的本质,可以这样表达,c#所有东西全都是类,一个继承另一个,子类继承父类。 连string. 阅读全文

posted @ 2012-06-26 12:51 流星落 阅读(6607) 评论(1) 推荐(1) 编辑

C#中对象的声明和使用
摘要:类和对象是密不可分,有类就有对象。有对象就有类,世界万物都可以看作对象。用面向对象的思想解决问题,就要把一切都看成对象。对象是不能脱离类存在的。类是对象共同拥有的属性的描述,由对象归纳成类,对象是类的具体体现。如汽车是一个类,而具体到某个人的车就是对象。在C#中,所有的东西都可以看作对象。把一个东西看成对象,我们就可以孤立的去审查它的性质,它的行为,进而研究和其他对象的关系。同样,在程序中使用对象的概念,就让我们把一个程序看成是很多对象相互作用的结果。对象必须建立在类的基础上,声明一下对象也就是类的实例化过程。对象是类的具体化的体现。我们创建一个教师类classs Teacher { publ 阅读全文

posted @ 2012-06-26 12:47 流星落 阅读(4234) 评论(1) 推荐(0) 编辑

C#访问修饰符
摘要:所有类型和类型成员都具有可访问性级别,用来控制是否可以在您程序集的其他代码中或其他程序集中使用它们。您在声明类型或成员时使用以下访问修饰符之一来指定其可访问性:public :访问不受限制。可以类内和任何类外的代码中访问。private: 可以被所属类访问。只有同一类或结构中的代码可以访问该类型或成员。protected :可以被所属类其派生类访问。只有同一类或结构或者派生类中的代码可以访问该类型或成员。internal :可以被当前程序集访问。同一程序集中的任何代码都可以访问该类型或成员,但其他程序集中的代码不可以。protected internal :同一程序集中的任何代码或其他程序集中 阅读全文

posted @ 2012-06-26 12:46 流星落 阅读(222) 评论(0) 推荐(0) 编辑

C#类的成员变量
摘要:类的声明中类的主体代码通常包含类的成员变量和成员方法.声明成员变量的语法如下:<访问修饰符> 数据类型 成员变量;成员变量命名规范如下:如果是公共成员变量、受保护的成员变量、内部成员变量,使用骆驼命名法,如name,gender等。如果是私有成员变量,使用骆驼命名法,并以下划线开头。如_age,_score等。例如:下面代码声明一个Student类,类中包含私有成员变量,_name,_score,_subject,_gender。class Strdent{private string _name; //姓名private string _score; //分数private st 阅读全文

posted @ 2012-06-26 12:44 流星落 阅读(2419) 评论(0) 推荐(0) 编辑

C#中类的声明
摘要:类就是用class来声明的。class的语法如下:<类的访问修饰符> class 类名{//类的主体}除class关键字和类名外,访问修饰符是可选项。下面以汽车为例声明一个类,代码如下:public class Car{//汽车属性和方法}类命名要遵循的编码规则:类命名应该采用帕斯卡命名法,即首字母大写。通常命名类采用完整的英文单词,如Book,Car,Teacher等。都属于命名规范的类名。我们熟悉的汽车除具有品牌,颜色,性能等特征外,还具有能够行驶等动作。汽车的颜色,品牌等特征叫Car类的成员变量,而能够行驶等动作叫做Car的方法。 阅读全文

posted @ 2012-06-26 12:42 流星落 阅读(751) 评论(0) 推荐(0) 编辑

C#是面向对象编程语言
摘要:C#是纯粹的面向对象编程语言,它真正体现了“一切皆为对象”的精神。在C#中,即使是最基本的数据类型,如int,double,bool类型,都属于System.Object类型。此外,使用C#编程,不会存在与游离于对象之外的属于过程的东西。这个世界是由什么组成的?这个问题如果让不同的人来回答会得到不同的答案。如果是一个化学家,他也许会告诉你“还用问嘛?这个世界是由分子、原子、离子等等的化学物质组成的”。如果是一个画家呢?他也许会告诉你,“这个世界是由不同的颜色所组成的”。……呵呵,众说纷纭吧!但如果让一个分类学家来考虑问题就有趣的多了,他会告诉你“这个世界是由不同类型的物与事所构成的”。好!作为 阅读全文

posted @ 2012-06-26 12:07 流星落 阅读(756) 评论(0) 推荐(0) 编辑

C#中类的概念
摘要:面向对象编程技术中最重要的概念就是类和对象,那么到底什么是类?在编程中应如何运用?类(Class)实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。简单地说,类是一种抽象的数据类型,是对一类对象的统一描述。在生活中,常常把一组具有相同特性的事物归为一类,当然根据分类的标准不同,划分的类也是不相同的。汽车和人都是独立的类,它们都有各自的特点。汽车这个大类还可以分为卡车,公共汽车,和小轿车等各种小类。人可以分为男人和女人。将这些思想反映在编程技术中就产生了类的概念。类是对象概念在面向对象编程语言中的反映,是相同对象的集合。类描述了一 阅读全文

posted @ 2012-06-26 12:07 流星落 阅读(1678) 评论(0) 推荐(0) 编辑

类和对象的关系
摘要:类是具有相同数据结构(属性)和相同操作功能(行为)对象的集合。对象就是符合某种类所产生的一个实例。对象与类的关系是:对象的共性抽象为类,类的实例化就是对象。类是一个抽象的概念,而对象是具体的,比如说车是一个类的话,张三的那辆奔驰车就是车这个类的一个实例,动物是一个类的话,李四的家养的那只猫就是动物类的一个对象实例。人类就是一个类,这个类包含了所有人的共同属性,像有四肢,有名字,会说话等等。而实例就是这个人类的具体实现,比如叫张三的这个人就是人类的一个实例,张三有着人类的所有属性。张三是人类的一个实例,同样李四也是人类的一个实例,但是张三和李四是不同的,因为他们是人类的两个不同的实例。一个对象是 阅读全文

posted @ 2012-06-26 12:06 流星落 阅读(444) 评论(0) 推荐(0) 编辑

从日常生活中看对象
摘要:其实对象这个名次对我们来说一点也不陌生,因为我们的日常生活中。随处可见的都是对象,小到地上的一粒沙,大到中国的万里长城,埃及的金字塔,所有的东西都是对象(万物皆对象)我们之所以会对对象这个词比较陌生,是因为我们平时不直接这么称呼它们,那么我们平时是怎么称呼这些对象呢?通常我们会以这个对象分类的名称来称呼它,例如路上有许多车子,天空有许多鸟,这里的车子,鸟都只是一种对象的分类而已,而这些分类我们习惯称为类。所以世界上有许多的车类,鸟类,鱼类等。那么对象和类之间有什么关系呢?对象就是附合某种类定义所产生出来的实例,而不是一个类。类只是个抽象的称呼,而对象是个看得到,摸的到,听得到的实例。可有些时候 阅读全文

posted @ 2012-06-26 11:59 流星落 阅读(218) 评论(0) 推荐(0) 编辑

C#格式化字符串
摘要:DataFormatString属性:{0:Bxx} B为取值类型格式字符 说明 C 以货币格式显示数值。 ({0:C2}¥123,456.78)D 以十进制格式显示数值。 ({0:D5}¥00123)E 以科学记数法(指数)格式显示数值。 F 以固定格式显示数值。 G 以常规格式显示数值。 N 以数字格式显示数值。 X 以十六进制格式显示数值。字符串固定长度显示:str.PadLeft(Int32) str.PadLeft(Int32, Char) OR PadRight int32:totalWidth Char:填补字符默认为空格,可指定如'#'例: float mone 阅读全文

posted @ 2012-06-26 11:57 流星落 阅读(307) 评论(0) 推荐(0) 编辑

C#字符串的简单用法
摘要:下面的代码实现的功能:输入Email邮箱,获取邮箱的用户名。输入带空格的字符串,分割并连接。输入大写英文字母转换为大写。using System;class Program{static void Main(){string strname;string inputStr;string[] splitString;string joinString;string strEnglish;string email;Console.WriteLine("请输入您的邮箱");email=Console.ReadLine().Trim();Console.WriteLine(&quo 阅读全文

posted @ 2012-06-26 11:54 流星落 阅读(234) 评论(0) 推荐(0) 编辑

C#字符串的使用
摘要:一、标记标记(tokenizing)是从文本中提取具体内容的过程。下面的代码从句子中提取单词,并把它们输出到控制台。class mytokenizing{ static void Main(string[ ] args) { string mystring="I like this food,are you?"; char[] separators={' ',',','?',':','!'}; int startpos=0; int endpos=0; do { endpos=mystring. 阅读全文

posted @ 2012-06-26 10:49 流星落 阅读(278) 评论(0) 推荐(0) 编辑

c#中处理字符串常用的函数及方法详细说明
摘要:一、string关键字与StringBuilder类C# 字符串是使用 string 关键字声明的一个字符数组。字符串是使用引号声明的,如下例所示:string s = "Hello, World!";字符串对象是“不可变的”,即它们一旦创建就无法更改。对字符串进行操作的方法实际上返回的是新的字符串对象。因此,出于性能方面的原因,大量的连接或其他涉及字符串的操作应当用 StringBuilder 类执行,如下所示:System.Text.StringBuilder sb = new System.Text.StringBuilder();sb.Append("on 阅读全文

posted @ 2012-06-26 10:48 流星落 阅读(734) 评论(0) 推荐(0) 编辑

C#字符串函数
摘要:Compare 比较字符串的内容,考虑文化背景(场所),确定某些字符是否相等CompareOrdinal 与Compare一样,但不考虑文化背景Format 格式化包含各种值的字符串和如何格式化每个值的说明符IndexOf 定位字符串中第一次出现某个给定子字符串或字符的位置IndexOfAny 定位字符串中第一次出现某个字符或一组字符的位置LastIndexOf 与IndexOf一样,但定位最后一次出现的位置 LastIndexOfAny 与IndexOfAny,但定位最后一次出现的位置PadLeft 在字符串的开头,通过添加指定的重复字符填充字符串PadRight 在字符串的结尾,通过添加指 阅读全文

posted @ 2012-06-26 10:47 流星落 阅读(203) 评论(0) 推荐(0) 编辑

C#冒泡排序
摘要:所谓C#冒泡排序就是在每一次排序的过程中总有一个最大的值被移动到后面,值小的就像水泡一样浮到水面。所谓冒泡,就是在水中垂直排列着一排大小顺序错乱的气泡,现在要求他们从大(小)到(大)排好队。于是众气泡们商量出了一条规则以便有规矩而不慌乱的排好顺序。据其中一气泡透露消息,它们的规则是这样的:从最底下的气泡开始往上浮动,如若碰到上面的气泡比它小,就对它说:兄弟,对不住了,您小,不能在上面,咱俩必须换个位置。一番交涉之后,气泡上升了,并继续着同样的使命。当碰到上面的兄弟比它大的时候, 没办法,游戏有游戏的规则,人生有人生的轨迹,气泡有气泡的规矩,只能对上面的仁兄说:老兄,我的使命结束了,后面的路程你 阅读全文

posted @ 2012-06-26 10:44 流星落 阅读(297) 评论(0) 推荐(0) 编辑

C#嵌套循环
摘要:嵌套循环就是在循环可以再使用循环,如前面讲过的确while,do...while,for,foreach循环都是可以互相嵌套的。例:利务嵌套输出九九乘法口诀。using System;class Program{static void Main(){int i=1,j,result;for(i=1;i<=9;i++){for(j=1;j<=i;j++){result=i*j;Console.Write("{0}*{1}={2}\t",j,i,i*j);}Console.WriteLine();}}}注意:使用嵌套循环时,一定要把一个循环完整地包括在另一个循环中。 阅读全文

posted @ 2012-06-26 10:42 流星落 阅读(229) 评论(0) 推荐(0) 编辑

break语句的作用
摘要:和continue语句一样,在循环语句中与条件语句一起使用。break语句用于跳出本层循环体,开始执行本层循环体外的代码。for(var i=1;i<=10;i++) { if(i==6) break; document.write(i); } //输出结果:12345 break语句跳出包含它的switch,while,do,for,或foreach语句。假如break不是在switch,while,do,for或者foreach语句的块中,将会发生编译错误。当有switch,while,do,for或foreach语句相互嵌套的时候,break语句只是跳出直接包含的那个语句块。如果要 阅读全文

posted @ 2012-06-26 10:39 流星落 阅读(1119) 评论(0) 推荐(0) 编辑

continue语句的作用
摘要:continue语句的作用通常在循环语句与条件语句一起使用。在循环中碰到continue后,就会终止本次循环,不执行该循环中位于continue后面的任何语句。continue语句用于结束当次循环,进入下一个循环。for(var i=1;i<=10;i++) { if(i==6) continue; document.write(i); } //输出结果:1234578910 continue语句只能用在while语句、do/while语句、for语句、或者for/in语句的循环体内,在其它地方使用都会引起错误! 阅读全文

posted @ 2012-06-26 10:38 流星落 阅读(561) 评论(0) 推荐(0) 编辑

C#循环语句-简单利索的foreach循环
摘要:简单利索的foreach循环foreach循环用于遍历整个集合或数组,可以获取集合中的所有对象,循环条件不使用布尔表达式,foreach循环简单易用,代码简洁,语法如下:利用foreach遍历数组示例foreach(数据类型 元素 in 集合或数组){//代码块}string[] cityName={"大连","上海","香港","广州","青岛"};foreach (string str in cityName){Console.WriteLine(str);}foreach循环表达式中,“数 阅读全文

posted @ 2012-06-26 10:36 流星落 阅读(549) 评论(0) 推荐(0) 编辑

C#循环语句-先判断后执行的另一种方式-for循环
摘要:for循环和while循环都是先判断后执行的方式,for循环的判断条件可以while复杂,常用在可以确定循环次数的情况下,语法如下:for(初始化部分;条件部分;更新部分){执行循环语句}for (int i = 0; i < 10; i++) { Console.WriteLine(i); }for循环的3个表达式都可以省略,但是两个分号不能省略。例如:for(;i<5;i++)for(;i<5;)for(;;)这些都是合法的,但是省略了表达式2会陷入死循环。for循环中的表达式1声明了循环变量i,表达式2限定了i的取值范围,也就是条件,表达式3规定了i如何变化,当表达式1 阅读全文

posted @ 2012-06-26 10:35 流星落 阅读(1039) 评论(0) 推荐(0) 编辑

C#循环语句-先执行后判断-do...while循环
摘要:do...while循环和while循环不同之处在于前者先执行,再判断条件,后者是判断,再执行,所以do...while循环不管是否满足条件,至少会执行一次代码块。语法如下:do{Do something;计数器变化}while(条件表达式)using System;class test{ public static void Main() { int sum=0; //初始值设置为0 int i=1; //加数初始值为1 do { sum+=i; i++; } while (i<=100); Console.WriteLine("从0到100的和是{0}",sum) 阅读全文

posted @ 2012-06-26 10:34 流星落 阅读(606) 评论(0) 推荐(0) 编辑

C#循环语句-先判断后执行-while循环
摘要:while循环是一个标准的循环语句,先判断是否循环,如果满足条件就执行循环,不满足就跳出循环,执行循环体外的语句。语法如下:while(条件表达式){Do something;计数器变化}using System;class Sample{ public static void Main() { int sum=0; int i=1; while (i<=100) { sum+=i; i++; } Console.WriteLine("从0到100的和是{0}",sum); }}上面的程序是先判断while条件是否成立,如果成立则执行循环体中的语句,每次执行前检查wh 阅读全文

posted @ 2012-06-26 10:32 流星落 阅读(1189) 评论(0) 推荐(0) 编辑

C#中的循环语句
摘要:循环就是重复执行一些语句。循环分为三类:一类在条件变为false之前重复执行语句,一类在条件变为true之前重复执行语句,另一类按照指定的次数重复执行语句。循环语句也可称迭代语句,C# 中共有四种循环语句,它们全部都支持用 break 来退出循环,用 continue 来跳过本次循环进入下一次循环。在C#中可以使用循环语句有4种形式:do...while:当(或直到)条件为true时循环。while:当条件为true时循环。for:指定循环次数,使用计数器重复运行语句。for each:对于集合中的每项或数组中的每个元素,重复执行。一、while 循环 语法: while (条件表达式) { 阅读全文

posted @ 2012-06-26 10:31 流星落 阅读(666) 评论(0) 推荐(0) 编辑

C#条件语句常见错误
摘要:常见错误实例:问题:如果学生成绩高于90分,成绩优秀。在70-90之间良好,60-70合格,60分以下不合格。static void Main(){int score=80;if (score>=90){Console.WriteLine("优秀");}else if(90>score>=70){Console.WriteLine("良好");}else if(70>score>=60){Console.WriteLine("合格");}else if(score<60){Console.Write 阅读全文

posted @ 2012-06-26 10:29 流星落 阅读(359) 评论(0) 推荐(0) 编辑

C#在多种条件下选择自己的路-swith结构
摘要:C#中的switch结构和if结构一样都可以实现条件判断,只是适用的条件不同。switch结构主要用于多重条件switch的语法如下:switch (condition){ case 常量表达式1: condition == 常量表达式1 时执行的语句; break; case 常量表达式2: condition == 常量表达式2 时执行的语句; break; default: 不满足上述条件时执行的语句; break;}case 个数 >= 0。任何两个 case 语句的常量表达式都不能具有相同的值,注意是值不能相同。case 和 default 的 break 必不可少。defau 阅读全文

posted @ 2012-06-25 16:56 流星落 阅读(977) 评论(0) 推荐(0) 编辑

C#条件判断-嵌套if结构
摘要:我们在上面的商店中,如果是商店会员可以享受打折优惠,非会员没有优惠。这个问题怎样解决呢?我们用前面的知识就不能解决,需要用到复杂的嵌套。其语法如下:if(表达式1){if(表达式2){代码块1}else{代码块2}else{代码块3}我们看这个例子:using System;class Program{static void Main(){Console.WriteLine("请选择是否会员,会员输入1,非会员为0");int flag=int.Parse(Console.ReadLine());Console.WriteLine("请输入您的购物价值,单位为元& 阅读全文

posted @ 2012-06-25 16:55 流星落 阅读(1885) 评论(0) 推荐(0) 编辑

C#条件判断-if...else结构
摘要:if...else结构就是经常说的“如果……就……否则就……”具体语法下:if (条件){ 满足条件时执行的语句;}else{ 不满足条件时执行的语句;}提示:if...else判断语句适用于只有两个条件的情况,即或者符合条件,或者不符合。我们看下面这个例子:using System;class Hello { public static void Main() { Console.Write("请输入你的名字:"); string str_userName=Console.ReadLine(); if(str_userName=="six"){ Con 阅读全文

posted @ 2012-06-25 16:54 流星落 阅读(461) 评论(0) 推荐(0) 编辑

C#条件判断-多重if结构
摘要:多重if结构的语法如下:if (条件){ 满足条件时执行的语句;}else if (条件2){ 满足条件2时执行的语句;}else if (条件3){ 满足条件3时执行的语句;}else{ 不满足以上任何条件时执行的语句;}请看下面这个例子。让我们想像这么一幕情景剧——时间:XXXX年2月14日;地点:某校园内小公园;人物:女生一,男生一。事件:(男生送给女生一束环瑰) 女生(高兴地):多美啊——多少钱买的! 男生:猜。 女生(心里想:如果多于100元我就亲他一口):超过100元吗? 男生:NO。 女生:(心里想:如果多于50元我就许他亲我一口):那,不低于50元吧? 男生:NO。 女生:(心 阅读全文

posted @ 2012-06-25 16:54 流星落 阅读(7468) 评论(0) 推荐(0) 编辑

C#条件判断-根据条件判断要走的路-if结构
摘要:什么时候要用到if结构语句呢?如果有一个班的学生期末成绩不是很理想,原因是考题太难,教师希望根据学生平时的表现给不同学生加平时成绩分,条件如下:如果平时每次都交作业,加20分;如果平时交了超过所有作业的1/2,加15分;其余同学每人加8分;面对这样的问题,我们该怎样解决?C# 的 if 语句有 3 种第一种if (条件表达式){ 满足条件时执行的语句;}第二种if (条件表达式){ 满足条件时执行的语句;}else{ 不满足条件时执行的语句;}第三种if (条件表达式){ 满足条件时执行的语句;}else if (条件2){ 满足条件2时执行的语句;}else if (条件3){ 满足条件3时 阅读全文

posted @ 2012-06-25 16:53 流星落 阅读(315) 评论(0) 推荐(0) 编辑

C#条件判断-if语句简单结构
摘要:1、简单if结构来看这个例子,然后做出你的判断:if (我每天赚100万){ 我每天都将100成中的90万分给你。}看完上面的“程序”,你觉得我是个大方的人吗?看起来是噢,但问题是我永远也无法每天赚100万,所以关于“我每天都将100成中的90万分给你” 整个是在穷开心呵。注意:if条件表达式的结果必须是布尔型的,即或者为真,或者为假。int score=20;if (score){Console.WriteLine("加20分");}这段代码编译时会出现错误。int score=20;if (score==20){Console.WriteLine("加20分& 阅读全文

posted @ 2012-06-25 16:53 流星落 阅读(2030) 评论(0) 推荐(0) 编辑

C#控制台的输入和输出-Console类-从控制台输入
摘要:Console类提供的输入方法非常简单,语法如下:Console.ReadLine();Console.ReadLine()方法返回的是键盘输入string类型;Console.Read()是把键盘输入的字符转化成ASC码;以下代码返回一个字符串类型,可以把它直接赋给字符串变量。string strname=Console.ReadLine();有时从控制台输入数字,就用到前面的数据转换。例如:int num=int.Parse(Console.ReadLine());int num=Convert.ToInt32(Console.ReadLine());注意:Console.ReadLine 阅读全文

posted @ 2012-06-25 16:52 流星落 阅读(1353) 评论(0) 推荐(0) 编辑

用Convert类实现数据类型转换
摘要:Convert类用于将一个基本数据类型转换为另一个基本数据类型,返回与指定类型的值等效的类型;受支持的基类型是Boolean、Char、SByte、Byte、Int16、Int32、Int64、UInt16、UInt32、UInt64、Single、Double、Decimal、DateTime和String。可根据不同的需要使用Convert类的公共方法实现不同数据类型的转换。所执行的实际转换操作分为以下3类:(1)从某类型到它本身的转换只返回该类型,不实际执行任何转换。(2)无法产生有意义的结果的转换引发InvalidCastException,不实际执行任何转换。下列转换会引发异常:从C 阅读全文

posted @ 2012-06-25 16:50 流星落 阅读(1421) 评论(0) 推荐(0) 编辑

C#控制台的输入和输出-Console类-输出到控制台
摘要:C# 控制台程序一般使用 .NET Framework Console 类提供的输入/输出服务。我们多次用到Console.WriteLine方法,我们再学习一些其他的方法。输出到控制台输出到控制台就是把数据输出到控制台并显示出来, .Net框架提供了Console类实现这个任务,具体方式有以下几种:Console.WriteLine();Console.Write();Console.WriteLine("输出的值");Console.Write("输出的值");Console.WriteLine("输出的格式字符串",变量列表); 阅读全文

posted @ 2012-06-25 16:50 流星落 阅读(8117) 评论(0) 推荐(0) 编辑

C#数据类型转换-数值字符串和数值之间的转换
摘要:首先,我们得搞明白,什么是数值字符串。我们知道,在 C# 中,字符串是用一对双引号包含的若干字符来表示的,如 "123"。而 "123" 又相对特殊,因为组成该字符串的字符都是数字,这样的字符串,就是数值字符串。在我们的眼中,"123"即是一串字符,也是一个数,但计算机却只认为它是一个字符串,不是数。因此,我们在某些时候,比如输入数值的时候,把字符串转换成数值;而在另一些时候,我们需要相反的转换。将数值转换成字符串非常简单,因为每一个类都有一个 void ToString() 方法。所有数值型的 void ToString() 方法都 阅读全文

posted @ 2012-06-25 16:49 流星落 阅读(20836) 评论(0) 推荐(0) 编辑

C#中数据类型转换-隐式转换
摘要:隐式转换:一般是低类型向高类型转化,能够保证值不发生变化。隐式数值转换:从 sbyte 到 short、int、long、float、double 或 decimal。 从 byte 到 short、ushort、int、uint、long、ulong、float double 或 decimal。从 short 到 int、long、float、double 或 decimal。从 ushort 到 int、uint、long、ulong、float、double 或 decimal。 从 int 到 long、float、double 或 decimal。 从 uint 到 long、ul 阅读全文

posted @ 2012-06-25 16:48 流星落 阅读(1492) 评论(0) 推荐(0) 编辑

C#中数据类型转换-显式转换
摘要:显示类型转换,也称强制类型转换。通过显示数据转换,可以把取值范围大的数据转换为取值范围小的数据。using System;class ConvertTest{static void Main(){int num1=3;float num2=num1;double num3=45.24;int num4;num4=num1*(int)num3;Console.WriteLine("整数类型转化为浮点类型{0}",num2);Console.WriteLine("总价格为{0}",num4);Console.ReadKey();}} 阅读全文

posted @ 2012-06-25 16:48 流星落 阅读(439) 评论(0) 推荐(0) 编辑

C#枚举-避免不合理赋值
摘要:什么是枚举?一年只能有12个月,每个星期只能从星期一到星期日,不能有别的日子,这些都是固定的值,不能随意变动。C#中处理这些数据就可以采用枚举。枚举是一组已经命名的数值常量,用来定义一组具有特定值的数据类型,枚举的定义方法如下:<访问修饰符> enum 枚举名称{枚举对象}public enum DayWeek{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}这段代码定义了表示一周中包括星期几的枚举。enum是声明枚举的关键字,DayWeek是枚举的名称,大括号中的数据是枚举对象,枚举对象之间用“,”隔开。默认情况下 阅读全文

posted @ 2012-06-25 16:46 流星落 阅读(1091) 评论(0) 推荐(0) 编辑

C#数组-使用数组的索引
摘要:定义的每个数组中有很多元素,如何有效地组织这些元素呢?其实每个数组元素都有一个编号,叫做数组索引,有时也称为数组下标。C#中数组的索引是从0开始的,最大索引等于数组长度减1。假设一个数组的长度为0,其索引从0开始,到n-1为止。C#通过索引来访问数组中的元素。using System;class Program { static void Main(string[] args) { string[] strName = new string[4]; //通过索引给每个数组元素赋值 strName[0] = "韦小宝"; strName[1] = "苏荃" 阅读全文

posted @ 2012-06-25 16:45 流星落 阅读(4446) 评论(0) 推荐(0) 编辑

C#数组-什么是数组
摘要:现在有一个班的学生姓名需要存储,根据前面学过的方法,需要定义与这个班人数相同的变量来分别存储每一个学生的姓名。如下代码:string student1="张三";string student1="李四";string student1="王五";string student1="赵六";……string student1="刘九";这种方法虽然能够实现我们的目标,但是很麻烦。如果有成千上万的学生也用同样的方式去实现,那就更不行了。下面引入数组来解决这个问题。数组是具有相联系类型和名称的变量的集合 阅读全文

posted @ 2012-06-25 16:44 流星落 阅读(583) 评论(0) 推荐(0) 编辑

C#数组-数组的初始化
摘要:数组和变量一样,在使用时必须对其进行初始化,即给变量或数组赋值。数组可以在定义时初始化,也可以在使用时初始化。下面的代码演示了如何初始化数组。int[] arrayInt={1,2,3,4}也可以用下面方式初始化数组:int[] arrayInt;arrayInt=new int{1,2,3,4}初始化数组还可将前面的方式组合起来,用这种方式初始化数组时,数组的大小必须与元素个数相同。如下所示:int[] arrayInt=new int[4] {1,2,3,4}注意:初始化数组时数组元素必须和数组声明的数据类型相同。 阅读全文

posted @ 2012-06-25 16:44 流星落 阅读(1134) 评论(0) 推荐(0) 编辑

C#装箱拆箱
摘要:C#中的数据类型包括值类型、引用类型和指针类型,而指针类型只有在不安全代码中使用。值类型包括简单类型、结构和枚举,引用类型包括类、接口、委托、数组和字符串等。为了保证效率,值类型是在栈中分配内存,在声明时初始化才能使用,不能为NULL,而引用类型在堆中分配内存,初始化时默认为NULL。值类型超出作用范围系统自动释放内存,而引用类型是通过垃圾回收机制进行回收。由于C#中所有的数据类型都是由基类System.Object继承而来的,所以值类型和引用类型的值可以相互转换,而这转换过程也就是所谓的装箱和拆箱。 装箱转换 装箱就是将一个值型变量隐式地转换为引用类型对象,虽然也可以显示转换,但一般都不需要 阅读全文

posted @ 2012-06-25 16:33 流星落 阅读(174) 评论(0) 推荐(0) 编辑

详解C#装箱与拆箱
摘要:装箱(box)就是将值类型转换为引用类型的过程。而相反的过程就叫拆箱(unbox)。一、装箱操作 例如: int val = 100; object obj = val; Console.WriteLine (“对象的值 = {0}", obj); 这是一个装箱的过程,是将值类型转换为引用类型的过程。值类型被装箱时发生了什么?(1)在堆上分配内存。因为值类型最终有一个对象代表,所有堆上分配的内存量必须是值类型的大小加上容纳此对象及其内部结构(比如虚拟方法表)所需的内存量。(2)值类型的值被复制到新近分配的内存中(3)新近分配的对象地址被放到堆栈上,现在它指向一个引用类型。二、拆箱操作 阅读全文

posted @ 2012-06-25 16:32 流星落 阅读(270) 评论(0) 推荐(0) 编辑

既然 int是值类型,而 class是引用类型,那么int是怎样从Object派生的呢?
摘要:是这样的,当int用作int时候,这是一个值类型(在栈上),然而,当它用作是Object时,这是一个引用堆上的整数值的引用类型。换而言之,当你将int看作对象时,运行层将它自动转化为对象引用,这个转化过程称作装箱(boxing)。这个转换包括将栈里的值拷贝到了堆里,并且新建了一个对象的实例来引用该值。拆箱操作(unboxing)是个反过程——将对象转化为基于栈的值类型。int x = 3;// 堆栈上新的int类型,值为3object objx = x;// 堆上新的int, 设定值为3,x=3仍然在堆栈上 int y = (int)objx;//新的int类型的值3在堆栈上,x=3在堆栈上, 阅读全文

posted @ 2012-06-25 16:31 流星落 阅读(265) 评论(0) 推荐(0) 编辑

值类型和引用类型的最基本的区别是什么?
摘要:C#将类型分为两类,一类是值类型,另一类是引用类型。大部分固有的基本类型(如整型,浮点型)是值类型,结构类型也是值类型。引用类型包括类、接口、数组和字符串。基本的概念非常简单,那就是一个值类型的实例代表了实际的数据(存在栈中),而一个引用类型的实例代表指向数据的指针或者引用(存在堆中)。在C#中是这样的:int x1 = 3; // x1是堆栈上的值 int x2 = new int(); x2 = 3; // x2还是堆栈上的值! 阅读全文

posted @ 2012-06-25 14:03 流星落 阅读(196) 评论(0) 推荐(0) 编辑

C#值类型和引用类型
摘要:所有的数据在C#中都可以最为两种基本数据类型:值类型和引用类型。什么是值类型呢,值类型数据存储在内存的栈中,可以提供快速访问。如果变量是值类型的,这个变量就包含实际数据,在一个内存区域保存自己的值。如果在代码中修改其值后,在内存中会保存修改的值。C#的整型,字符型,浮点型,布尔型等都属于值类型。结构,枚举也属于值类型。引用类型指向存储在内存堆中的数据的指针和引用。引用类型总是指向一个对象,而且这个对象具有指定的类型,并且在堆上分配了地址。字符串,数组,接口,类,委托都属于引用类型。值类型和引用类型的区别1. 值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对 阅读全文

posted @ 2012-06-25 14:02 流星落 阅读(394) 评论(1) 推荐(0) 编辑

运算符的优先级和结合性
摘要:当表达式中包含多个运算符时,运算符的优先级控制各运算等的计算顺序。如x+y*z,按x+(y*z)计算。当一个操作数出现在两个相同优先级的运算符时,这些运算符的运算顺序取决于其结合性,结合性指运算符在表达式中从左到右或从右到左右的运算顺序。赋值运算符和条件运算符(?:)按右结合原则。除此之外,所有二元运算符都是左结合的,运算按从左到右的顺序执行。在写运算符时,在写表达式的时候,如果无法确定运算符的有效顺序,则尽量采用括号来保证运算顺序。运算符的优先级括号()>自加自减(++,--)>乘、除、取余(*,/,%)>加减(+,-)>小于、小于等于,大于,大于等于(<,<=,>,> 阅读全文

posted @ 2012-06-25 14:01 流星落 阅读(603) 评论(0) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示