摘要: 析构函数 析构函数是在类的破坏时自动执行的操作,析构函数在碎片收集时会自动调用,程序员无法控制何时调用析构函数,因为这是由垃圾回收器决定的 垃圾回收器 与运行时不进行垃圾回收的开发语言相比,C#无需太多的内存管理,这是因为.NETFramework垃圾回收器会隐式的管理对象的分配和释放,垃圾回收器检查是否存在应用程序不在使用的对象,如果垃圾回收器认为某个对象符合析构,则调用析构函数,并回收此对象占用的内存,应用程序退出时也会调用析构函数 为什么使用析构函数? 一般情况下,C#应用程序中很少使用析构函数,但是当应用程序封装窗口,文件和网络连接这些非托管资源时,应该使用析构函数释放这... 阅读全文
posted @ 2012-02-04 14:51 David.Meng 阅读(428) 评论(0) 推荐(0) 编辑
摘要: 对象初始化器 对象初始化器,就是简化代码,让本来几行写完的代码,一行就写完了 使用对象初始值设定项,可以在创建对象时向对象的任何可访问的字段或属性分配值,而无须显示调用构造函数,其实对象初始化器最大的作用就是减少代码的书写量,把原本一些人做的事情交给了框架 举例 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _13_ObjectInitializers { class Program { static void Ma... 阅读全文
posted @ 2012-02-04 14:11 David.Meng 阅读(422) 评论(0) 推荐(0) 编辑
摘要: 阅读目录 一:分布类 二:实例 一:分布类 . 为了将在某种意义上讲比其他细节更重要的代码分离出来,可以将一个类的实现划分到多个C#文件中,这就是分布类,比如:有个Pesoon类的源文件叫 Pesoon.cs,有时候为了区分不同开发人员的维护范围,避免定义在同一个文件中造成互相干扰,C#通过分布类的做法,将一个类拆分为多个文件 partial class 类名称 { //类成员 } . 如果使用这种方式定义类,那么要遵循以下原则 1:分布类在每一个源文件中都必须使用partial关键字声明部分类 2:类的部分声明都必须在相... 阅读全文
posted @ 2012-02-03 12:02 David.Meng 阅读(397) 评论(1) 推荐(0) 编辑
摘要: 类和结构的区别是什么? 结构和类的初始化都用new关键字,但是它们之间的差别很大,主要体现在三个方面 三点区别 1:结构是值类型,类是引用类型 2:结构不支持继承,类可以继承其他类,其自身也能被继承 3:结构没有构造函数和析构函数,类具有构造函数和析构函数 阅读全文
posted @ 2012-02-03 11:57 David.Meng 阅读(456) 评论(0) 推荐(0) 编辑
摘要: 字段 字段是存储类要满足其设计所需要的数据,字段是与类相关的变量 比如以前讲的Cat类中的private string _name;_name其实就是一个字段,它通常是类的私有变量 属性 属性是一个方法或者一对方法,但在调用它的代码来看,它是一个字段,即属性适合以字段的方式使用方法调用的场合 通常字段都是private,即私有变量,而属性是public,即公有变量,那么在这里_shoutnum就是私有的字段,而ShoutNum就是公有的对外属性,由于是对外的,一般首字母大写,而字段一般首字母并且小写前面加上“_” 属性有两个方法get和set,get访问器返回与声明的属性相同的... 阅读全文
posted @ 2012-02-03 00:07 David.Meng 阅读(567) 评论(0) 推荐(1) 编辑
摘要: 阅读目录 一:自动属性 二:创建自动属性 三:实例 一:自动属性 . 当属性访问器中不需要其他逻辑时,自动实现的属性可时属性的声明变得更加简洁。 二:创建自动属性 . 一旦在类中声明了自动属性,那么编译器将创建一个私有的匿名后备字段,但是这个私有字段只能通过属性的get和set访问器进行访问。 . 自动属性必须同时声明get和set访问器,假如要创建只读的自动属性,必须在set访问器前加上privvate关键字 三:实例 1 using System; 2 using System.Collections.Generic; 3 using Syste... 阅读全文
posted @ 2012-01-31 18:04 David.Meng 阅读(349) 评论(0) 推荐(0) 编辑
摘要: 扩展方法 扩展方法是你能够向现有类型和自定义类型添加方法,而无需创建新的派生类型或者以其他方式修改原始类型 扩展方法是一个特殊的静态方法,它定义在一个静态类中,但是可以在其他类型(我们要扩展的那个类)的对象上像调用实例方法那样调用,因此通过扩展方法可以在不修改一个类的前提下对一个类进行功能上的补充 创建扩展方法 扩展方法和一般静态方法定义类似,惟一的区别是在第一个参数的前面加上this关键字,同时第一个参数的类型也决定了扩展方法可以扩展的类型 格式 public static 返回类型 扩展方法名称(this 要扩展的类型sourceObj[,扩展方法参数列表]) 扩展方法的... 阅读全文
posted @ 2012-01-31 17:06 David.Meng 阅读(590) 评论(1) 推荐(2) 编辑
摘要: 静态方法 定义静态方法和定义非静态方法类似,只是在定义静态方法时,需要在返回值类型前加static关键字,静态方法在程序启动的时候,系统就会为静态方法在内存中创建一个实例,不需要再手动去实例静态方法,通过类名可以直接调用静态方法,静态方法在内存中占有一定的内存空间。 在类中一旦定义了静态方法,那么就可以直接通过类名调用静态方法,并不需要实例化对象访问静态方法 实例 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _9_StaticM... 阅读全文
posted @ 2012-01-18 14:44 David.Meng 阅读(450) 评论(0) 推荐(0) 编辑
摘要: 前言探讨 我们说过构造函数是对类进行初始化的,我们希望刚出生的小猫有个姓名叫“咪咪”,当它叫的时候,能说“我的名字叫咪咪”,此时就要用到构造函数了,如下代码没有加绿色代码的部分,但是问题来了?如果我们事先没有给小猫起好名字,那么就创建不了实例了,这种现象很正常,有些父母刚生下孩子的时候,姓名没有起好是很正常的事情,就以下的代码没有加绿色代码的部分,你如果写Cat cat = new Cat();是会报“Cat方法没有采用0个参数的重载”的错误,原因就是必须要给小猫起名字,如果不需要起名字也要生下小猫,可以用方法重载实现 方法的重载 提供了创建同名的多个方法的能力,但是这些方法需要使用... 阅读全文
posted @ 2012-01-18 14:10 David.Meng 阅读(487) 评论(0) 推荐(0) 编辑
摘要: 构造函数 构造函数又叫构造方法,其实就是对类进行初始化,构造函数与类同名,无返回值,也不需要void,在new时候调用 所有的类都有构造函数,如果你不写构造函数的话,系统默认生成空的构造函数,若你有自定义的构造函数,那么默认的构造函数就失效了,也就是说,由于你没有在Cat类中定义过构造函数,C#会生成一个空的构造函数Cat(),当然这个空的函数什么也不做,只是为了让能顺利的实例化而已 Cat cat =new Cat(),new后面的Cat()其实就是构造函数 什么时候用构造函数呢? 我们说过构造函数是对类进行初始化的,我们希望刚出生的小猫有个姓名叫“咪咪”,当它叫的时候,能说“... 阅读全文
posted @ 2012-01-14 10:11 David.Meng 阅读(454) 评论(0) 推荐(1) 编辑
摘要: 前言 一:out参数 二:注意 一:out参数 out关键字与ref关键字很相似,out关键字也会导致参数通过引用来传递,与ref关键字不同,ref关键字要求变量必须在传递之前进行初始化,out关键字不要求变量在传递之前必须进行初始化,但是必须在方法中为变量赋值,如果使用out关键字,方法定义和调用 阅读全文
posted @ 2012-01-13 11:33 David.Meng 阅读(812) 评论(0) 推荐(0) 编辑
摘要: ref参数 不仅可以通过值为方法传递参数,还可以通过引用为方法传递参数,若通过引用为方法传递参数,需要使用ref关键字 如果把一个参数传递给方法,且这个方法的输入参数前带有ref关键字,那么这个方法对参数所作的任何改变都会影响原来对象的值 注意 1:通过ref传递的引用参数,在函数成员调用之前,必须 阅读全文
posted @ 2012-01-13 11:00 David.Meng 阅读(777) 评论(0) 推荐(0) 编辑
摘要: 方法 在C#中通过创建函数实现方法,方法是一个执行可以由对象和类完成计算或者行为的成员,方法通过指定访问级别,返回值,方法名称,方法参数,在类或者结构中声明的,这些部分统称为方法的“签名”,访问修饰符默认为private 方法格式 如果为方法传递参数,必须声明数据类型,如果方法有返回值,return必须与返回值一起使用以指明出口点 访问修饰符 返回值类型 方法名称 方法参数 [modifiers] return_type MethodName([parameters]) { //方法体 } 实例 using System; using System.Collect... 阅读全文
posted @ 2012-01-13 10:36 David.Meng 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 类的数据结构 类是一种包括数据成员,函数成员,嵌套类型进行封装的数据结构 类包含的数据成员 构造函数,析构函数,常数,字段,属性,方法,事件,委托,类,结构,接口,索引器 数据成员可以是静态成员,即与整个类相关,也可以是实例成员,即与对象相关 字段是与类相关的变量,与声明变量的方式相同,字段在类中声明,变量则在主函数和方法中声明 实例 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _3_ClassMember { cl... 阅读全文
posted @ 2012-01-13 10:11 David.Meng 阅读(416) 评论(0) 推荐(0) 编辑
摘要: 前言 我们在前篇“ASP.NET温故而知新学习系列之ASP.NET中的状态—1-状态管理概述”中讲到HTTP协议是个“无状态”的协议,当你从一个页面跳转到另外一个页面,它是不会保存数据的,但是我们需要数据如何从一个页面传递到另一个页面,以及在好多页面当中共享一些数据,为了允许用户通过请求保存状态信息 阅读全文
posted @ 2012-01-12 15:28 David.Meng 阅读(2035) 评论(0) 推荐(2) 编辑
摘要: 定义结构 结构与类相似,主要区别在于,类是存储在堆上的引用类型,而结构是存储在堆栈上的值类型,以及访问方式和一些特征(结构不支持继承)。 在C#中使用struct关键字,一个名称,一对大括号来定义一个结构,也是使用new关键字声明实例。 结构的语法格式 struct MyStruct { //结构主体 } 实例 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _2_struct { struct MyStruct ... 阅读全文
posted @ 2012-01-12 11:25 David.Meng 阅读(509) 评论(2) 推荐(0) 编辑
摘要: 定义类 在C#中使用class关键字,一个名称,一对大括号来定义一个新类,类的数据成员和方法位于类的主体内(一对大括号之间) 类的语法格式 class MyClass { //类的主体 } 类修饰符 在定义类的时候可以在类的前面加上访问修饰符,类的修饰符用于控制被访问的范围,默认情况下,类的修饰符为internal 我们可以看到我们在类前面加了private,protected ,protected internal 都编译出错,所以证明类的修饰符只有这两个,一个是internal ,另外一个则是public 1:internal 内部的 默认什... 阅读全文
posted @ 2012-01-11 15:04 David.Meng 阅读(2475) 评论(0) 推荐(1) 编辑
摘要: 前言 前一节说了我们创建线程的参数是一个函数,当新的线程启动的时候,它就会执行这个函数,这个函数是没有任何参数的,且没有返回值的,那么新的需求来了,如何调用一个有参数的函数呢? 阅读目录 一:利用构造函数传递参数 二:运行机制 三:运行效果 一:利用构造函数传递参数 using System; us 阅读全文
posted @ 2012-01-11 12:22 David.Meng 阅读(792) 评论(3) 推荐(0) 编辑
摘要: 前言 多线程编程是跨语言的,跨环境的,所以我们得学好它,对应用程序的性能提高是有帮助的。 阅读目录 一:System.Threading 二:Thread类 三:Thread说明 四:Thread的使用 五:运行机制 六:运行效果 一:System.Threading 提供一些使得可以进行多线程编程 阅读全文
posted @ 2012-01-11 11:34 David.Meng 阅读(2861) 评论(2) 推荐(0) 编辑
摘要: 阅读目录 一:线程基本概念 二:进程举例 三:什么时候用线程? 四:使用线程的缺点 一:线程基本概念 1. 线程是程序执行的基本原子单位,我们上学的时候学过一个分子包括无数个原子,而原子是不能在分割的,原子是最小的单位,一个进程可以由多个线程来组成,解放战争中有好多战役,比如淮海战役,淮海战役中有很多小的战斗组成的,我们可以把淮海战役看做进程,而淮海战役中很多小的战斗看做线程,从这个角度来看,为什么会提高效率呢?把一个进程分成好多线程,把一个战役分成好多小的战斗来组成,让它们并发异步执行来提高运行的效率,同时两个战斗同时打响,并发执行并不是同时执行(占用CPU),因为CPU... 阅读全文
posted @ 2012-01-09 15:19 David.Meng 阅读(707) 评论(2) 推荐(1) 编辑