1.0基础、标示符、常量、数据类型(enum枚举,struct结构体)、操作符、循环、数组一、程序现实生活中,程序是指完成某些事务的一种既定方法和过程,可以把程序看成是一系列动作执行过程的描述。在计算机世界,程序是指令,即为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合程序=数据结构(指程序中的特定数据类型和数据组织形式)+算法(算法是指为达到某个目的所要执行的操作步骤)二、标示符标识符用来表示程序中的一个特定元素,如类名、方法名、变量名、项目名等等标识符可以是字母、数字、下划线及“@”,但是必须以字母、下划线及@开头,不能以数字开头标识符严格区分大小写可以使用中文做为标识符,但不建议使用不能使用关键字做标识符对于类名和方法名的标识符,一般将每个单词的首字母大写,如StudentInfo;字段及变量名首单词的首字母小写,其他单词首字母大写三、常量常量使用const关键字来定义,常量在声明时必须赋值,且以后不能再对其赋值eg:constinta=10;四、数据类型C#中的数据可以分为两大类:值类型(ValueType)和引用类型(ReferenceType)。值类型包括:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型引用类型包括:数组,接口,委托,类(用户自定义类、String类、Object类)值类型的对象,继承自System.ValueType类(此类的对象却是引用类型的),内容直接储存在栈上(以及MSDN中提到的“或在结构中以内联方式分配的”——“orallocatedinlineinastructure”);引用类型的对象,其内容存储于堆上,栈上的相应变量名下只存储该处的堆地址,长度为4字节/32位(32位操作系统)或者8字节/64位(64位操作系统)。值类型的对象不能为null。不能从已有的值类型派生新的数据类型。栈的特点:存放数据类型(值类型),其优点:比在堆上分配空间更快;用完之后立即自动释放;赋值方便(使用等号)堆的特点:存放引用类型。值类型的数据类型全部继承自System.ValueType类,它们又分为以下几类:C#系统自定义了13种数值类型的数据类型:整型9种:byte,short,int(系统默认),longsbite,ushort,uint,ulong,char----类型装换Convert类名称值范围系统名称属于CLS占用内存长度byte0至28-1(128)System.ByteYes1字节/8位sbyte-27至27-1System.SByteNo1字节/8位ushort0至216-1(65535)System.UInt16No2字节/16位short-215至215-1System.Int16Yes2字节/16位char\0000至\ffffSystem.CharYes2字节/16位uint0至232-1(约4.29×109)System.UInt32No4字节/32位int-231至231-1System.Int32Yes4字节/32位ulong0至264-1(约1.84×1019)System.UInt64No8字节/64位long-263至263-1System.Int64Yes8字节/64位浮点型3种:float,double(系统默认),decimal名称值范围系统名称属于CLS精度占用内存长度实例float(单精度)±1.5×10-45至±3.4×1038System.SingleYes7位4字节/32位floatf=3.14fdouble(双精度)±5.0×10-324至±1.7×10308System.DoubleYes15至16位8字节/64位doubled=2.14decimal(高精度)±1.0×10-28至±7.9×1028System.DecimalYes28至29位16字节/128位decimald=2.13M布尔型(逻辑)1种:bool可能的取值为true和false,占用内存长度1字节/8位。C#中不再有类似于“零等于flase,非零int值等于true”的变换。bool型的系统名称为System.Boolean,属于CLS.其他2种:enum枚举枚举的数据类型的声明:[属性(attributes)][访问标识(modifiers)]enum名称(identifier)[:基类型(base-type)]{枚举列表(enumerator-list)}[;]枚举类型的本意有两点:一是将难以记忆的整型数常量(除char外的8种整型数都可以)标记为更好理解的变量名。二是引入强类型,在需要采用整形数常量表示的变量之间建立屏障。虽然每个字符串代表了一个整形数常量,但是具体使用枚举类数据类型的整型数常量时仍需要强制类型转换。这个整数值在C#默认是int型的。枚举列表中各个变量的赋值默认是从0开始,递加1的。例如:enumdays:int{Sat,Sun,Mon};取值(int)days.Sun为1或enumdays:int{Sat=1,Sun,Mon};取值(int)days.Sun为2struct结构体用户自定义的值类型数据类型,和类相似也有不同(有篇博客具体介绍过);本身没有继承这一特点,因此与继承相关的一切(例如抽象方法)结构体均不具备,除了两点:所有的结构体继承自System.Object类、结构体可以继承(实现)接口。类结构体类型引用类型值类型实例化必须通过new实例化可以不new,直接声明,但声明后必须赋值构造方法(函数)方法不受限制(有、无参数均可,默认是无参)方法必须带有参继承自身继承System.Object,可继承(包含接口),也可被继承除自身继承System.ValueType外,不可继承(除接口,通常叫做实现接口),也不可被继承成员字段声明时可赋值(初始化)字段声明时不可赋值,方法一般公有作参数传递给方法传递的是引用(值一但修改所有指向改类值都已改变)传递的是实际值(值修改不会影响其它指向值,除非被ref修饰;ref修饰后传递引用)性能介绍:结构是值类型,所以会影响性能,但根据使用结构的方式,这种影响可能是正面的,也可能是负面的。正面的影响是为结构分配内存时,速度非常快,因为它们将内联或者保存在堆栈中。在结构超出了作用域被删除时,速度也很快。另一方面,只要把结构作为参数来传递或者把一个结构赋给另一个结构(例如A=B,其中A和B是结构),结构的所有内容就被复制,而对于类,则只复制引用。这样,就会有性能损失,根据结构的大小,性能损失也不同。注意,结构主要用于小的数据结构。但当把结构作为参数传递给方法时,就应把它作为ref参数传递,以避免性能损失——此时只传递了结构在内存中的地址,这样传递速度就与在类中的传递速度一样快了。另一方面,如果这样做,就必须注意被调用的方法可以改变结构的值。五、操作符分类:赋值操作符:=复合赋值运算符:+=,-=,*=,/=,%=算数运算符:+,-,*,/,%(ß二元运算符),++,--(ß一元运算符)条件运算符:,,=,=,!=,==逻辑运算符:&&(遇假为假),||(同真为真),!位运算符:&,|,^,~,,备注:几乎所有的操作符都只能操作基本数据类型,但是”=”,”==”和”!=”,这些操作符能操作所有的对象。除此以外String类支持”+”和”+=”。优先级:postfixoperators[].(params)expr++expr--unaryoperators++expr--expr+expr-expr~!creationorcastnew(type)exprmultiplicative*/%additive+-shiftrelational==instanceofequality==!=bitwiseAND&bitwiseexclusiveOR^bitwiseinclusiveOR|logicalAND&&logicalOR||conditional?assignment=+=-=*=/=%=&=^=|====备注上面的操作数优先级从上到下依次降低,同一个单元格内的优先级相同六、循环注:[]表示可有可无while(先判断后执行,)用法:while(循环条件){循环体}其它用法:while(变量名){case变量值1:[执行语句]break;······default:[执行语句]break;}do-while(先执行一次再判断)用法:do{循环体}while(循环条件);for(和while类似,先判断)用法:for([初始化循环变量];[循环条件];[修改循环变量值]){循环体}foreach(遍历)用法:foreach(类型变量名in类型数据列表){}扩展:continue(跳出本次循环进行下次循环)、break(跳出整个循环)、return(跳出整个方法,可有可无返回值)七、数组一维数组:类型[]变量名=new类型[长度];多维数组(矩形数组):类型[,]变量名=new类型[外长度,内长度];--注:[]里的,等于几维减1交错数组(数组的数组):类型[][]变量名=类型[长度][];2.0面向对象类与实例(关键字)、封装、继承、多态(虚方法,抽象类,抽象方法,接口)一切事物皆为对象,对象是可以看到、感觉到、听到、触摸到、尝到、或闻到的东西。对象是一个自包含的实体,用一组可识别的特性和行为来标识。面向对象编程(Object-OrientedProgramming):其实就是针对对象来进行编程。面向对象的语言必须满足三大特性:封装、继承、多态一、类与实例定义:具有相同属性和功能的对象的抽象的集合,是对象的一种表现形式;实例化就是创建对象的过程(new),实例就是一个真实的对象。修饰符和关键字:分类名称修饰符/关键字概述实例使用属性修饰符[Serializable]按值将对象封送到远程服务器。在按值封送对象时,就会创建一个该对象的副本,并将其序列化传送到服务器。任何对该对象的方法调用都是在服务器上进行的。[STAThread]是Single-ThreadedApartment单线程套间的意思,是一种线程模型(线程模式用于处理组件在多线程的环境里并行与并互的方式),套间线程(STAThread)模式中接口跨线程传递必须被调度(Marshal),不调度直传肯定会失败!而MTA或FreeThread模式中的接口可以不经调度直接传递。这种调度在特定的环境中非常影响性能(可有几百倍之差)。如VB里只支持STAThread模式。FreeThread模式的组件会在里面表现成和跨进程一样慢!线程模式是微软的COM基础中的极其重要的概念。一定要吃透![MTAThread]是MultiThreadedApartment多线程套间的意思,同上也是一种线程模型。访问修饰符private只有包含该成员的类可以使用,作用于类成员。protected只有包含该成员的类以及派生类可以存取,作用于类成员。internal只有当前工程(程序集)可以存取,作用于程序集及以内。public存取不受限制,任何地方都可以访问,作用于程序集及以内。类修饰符abstract抽象类。指示一个类只能作为其它类的基类。sealed密封类。指示一个类不能被继承。理所当然,密封类不能同时又是抽象类,因为抽象总是希望被继承的。成员修abstract指示该方法或属性没有实现。饰符sealed密封方法。可以防止在派生类中对该方法的override(重载)。不是类的每个成员方法都可以作为密封方法密封方法,必须对基类的虚方法进行重载,提供具体的实现方法。所以,在方法的声明中,sealed修饰符总是和override修饰符同时使用。delegate委托。用来定义一个函数指针。C#中的事件驱动是基于delegate+event的。event声明一个事件。extern指示方法在外部实现。override重写。对由基类继承成员的新实现。readonly指示一个域只能在声明时