C#基础知识一、.NetFramework介绍.NET框架(.NETFramework)是一个开发、部署和运行.NET应用的环境,包括了ASP.NET、公共语言运行时环境(CLR)以及.NET框架类,包括四个主要内容:1.CLR(CommonLanguageRunTime,可译为通用语言运行环境或公共语言运行库);功能:编译、运行(编译出.exe或.DLL文件)。2.UCL(UnifiedClassLibarary,统一对象链接库),也就是类库;(usingSystem;//系统类、usingSystem.Web//WebForm类)3..NET程序语言(包括有C#,VB,C++,J#等等);4..NET工具,就是指VisualStudio2008等等的工具。二、C/S模式与B/S模式简介C/S结构,即Client/Server(客户机/服务器)结构。B/S结构,即Browser/Server(浏览器/服务器)结构。Client/Server是建立在局域网的基础上的。Browser/Server是建立在广域网的基础上的。1.硬件环境不同:C/S一般建立在专用网络或小范围网络,局域网之间再通过专门服务器提供连接和数据交换服务。B/S建立在广域网,不必是专门的网络硬件环境,适应范围更强,一般只要有操作系统和浏览器就行;2.对安全要求不同:C/S一般面向相对固定的用户群,对信息安全的控制能力很强.一般高度机密的信息系统采用C/S结构适宜。B/S建立在广域网之上,对安全的控制能力相对弱,面向是不可知的用户群;3.系统维护不同:系统维护是软件生存周期中开销最大的一个阶段,C/S程序由于整体性,在出现问题时要考虑系统整体升级,B/S程序在维护升级时只需要考虑单个文件的更新即可。三、C#基本规则1.标识符:在C#中,标识符的命名有如下规则:(1)首字符必须是字母、下划线“_”或“@”;后面的字符可以是字母、下划线或数字;(2)标识符不应该使用C#的关键字。如果一定要用C#的关键字作为标识符,应使用“@”字符作为前缀;(3)允许在标识符中使用Unicode转义符;2.关键字:关键字又称保留字,是一种有特殊用途的标识符。由系统预先定义好的,不能用于其它目的。C#中有七十多个关键字。3.C#的数据类型基本数据类型有5种:整型(int)、浮点型(float)、字符型(char)、双精度浮点型(double)和无值型(void)。声明一个值类型的语法形式为:数据类型变量名;或数据类型变量名1,变量名2,…,变量n;4.数组:数组用于存储同一种类型的数据。数组是一种引用类型,而不是值类型。数组是按照数组名、数据元素的类型和维数来描述的。C#中可以有一维数组、多维数组、交错数组。数组的使用:访问数组中的元素时,其下标是从0开始索引的。数组元素可以是任何类型,包括数组类型。可以使用Length属性获取一维数组的长度,如果是多维数组,则可以使用GetLength方法确定其某一特定维的长度。由多种对数组操作的方法,例如Sort和Reverse,可以将数组按照升序或降序排列。一维数组:数据类型[]数组变量;//int[]myArray;二维数组:数据类型[,]数组变量;//int[,]myArray;三维数组:数据类型[,,]数组变量;//int[,,]myArray;交错数组:数据类型[][]数组变量;//int[][]myArray;5.隐式转换:隐式转换是系统默认的,遵守“由低级(字节数和精度)类型向高级类型转换,结果为高级类型”的原则。如:stringa,b;a=10+“12”;//系统将整型数据10隐式转化为字符串“10”,结果a的内容为“1012”。6.显示转换(1)强制转换:强制转换转换的一般格式为:(数据类型名称)数据(2)ToString()方法─将基本数值类型转化为字符串:变量名称.ToString()(3)Parse方法─将字符串转换为数值:数值类型名称.Parse(字符串表达式)(4)Covert类─各种数据类型之间的相互转化,Convert类的常见方法:7.运算符与表达式(1)算术运算符与算术表达式:在C#中,用算术运算符连接起来的式子称为算术表达式。基本算术运算符及其功能如下表所示。(2)关系运算符与关系表达式C#语言中提供6种关系运算符,=,,=,==,!=优先级别顺序是:自上而下,优先级由高到低。同级运算符的结合性是“左结合性”,即“自左向右”顺序进行。关系运算的优先级都低于算术类,高于赋值类。(3)逻辑运算符与逻辑表达式逻辑运算符:有3种“!”(逻辑非)、“&&”(逻辑与)和“||”(逻辑或)。逻辑表达式:一般形式为:!x,x&&y,x||y(4)条件运算符:表达式1?表达式2:表达式3如果“表达式1”的值为非0(真),则条件表达式的运算结果等于“表达式2”的值,否则,运算结果等于“表达式3”的值。8.C#基本语句:顺序执行分支循环异常捕获如果一个逻辑块包含两条或两条以上的语句序列,必须使用大括号{}将语句括起来。(1)条件分支语句if...else...它的功能是根据布尔表达式的值(true或者false)选择要执行的语句序列,使用时要注意else应和最近的if语句匹配。条件分支语句switchswitch语句也叫case语句,switch语句常用形式为:每个case块的最后一句一定要是break语句,或者是goto语句。在一个switch中,不能有相同的两个case标记。switch(表达式){case常量表达式1:语句序列1case常量表达式2:语句序列2……[default:语句序列]}(2)循环语句:for语句while语句do-while语句foreach语句a.for(初始值;循环条件;循环控制){语句序列}b.while(条件){语句序列}c.do{语句序列}while(条件);//至语句序列至少会执行一次。d.foreach(类型标识符in表达式){语句序列}(3)跳转语句:a.break语句功能:退出最近的封闭switch、while、do-while、for或foreach语句。b.continue语句功能:将控制传递给下一个while、do-while、for或foreach,继续执行下一次循环。c.return语句return[表达式];功能:将控制返回到出现return语句的函数成员的调用方。(4)异常处理a.try{语句序列}catch(异常类型标识符){异常处理}b.try{语句序列}catch(异常类型标识符){异常处理}finally{语句序列}c.throw[表达式];//注意表达式类型必须是System.Exception或从System.Exception派生的类的类型。throw也可以不带表达式,不带表达式的throw语句只能用在catch块中,在这种情况下,它重新抛出当前正在由catch块处理的异常。四、C#程序命名规则1、标识符规则:区分大小写、可以出现字母数字下划线、但第一个字母必须是字母或下划线、不能使用关健字2、使用Pascal规则来命名方法类型类、方法、接口、枚举类型、委托,一般情况下,接口名称加前缀“I”3、用Camel规则来命名局部变量和方法的参数一般情况下,方法内私有变量以”_”开头4、自定义的属性以Attribute结尾publicclassTableAttribute:Attribute{}5、自定义异常以Exception结尾publicclassNullEmptyException:Exception{}6、方法的命名一般以动宾短语7、局部变量的名称要有意义,不要使用x,y,z等,可以在for循环中使用i,j,k,l,m,n8、所有的成员变量的声明在类的顶端,用一个换行和方法隔开9、用有意义的名字命名namespace,如公司名、产品名10、建议局部变量在最接近使用的时候声明11、使用某个控件的值时,尽量命名局部变量12、把引用的系统namespace和自定义的或第三方的用换行分开。13、文件名要能反映类的内容,最好是和类同名,一个文件中一个类或者一组类关联类。14、目录结构中要能反应出namespace的层次15、大括号要新起一行C#:String.Format数字格式化输出inta=1234;//格式为sring输出//Label1.Text=string.Format(asdfadsf{0}adsfasdf,a);//Label2.Text=asdfadsf+a.ToString()+adsfasdf;//Label1.Text=string.Format(asdf{0:C}adsf,a);//asdf¥1,234.00adsf//Label2.Text=asdf+a.ToString(C)+adsf;//asdf¥1,234.00adsfdoubleb=1234.12543;a=12345678;//格式为特殊的string样式输出//Label1.Text=string.Format(asdf{0:C}adsf,b);//asdf¥1,234.13adsf//Label2.Text=asdf+b.ToString(C)+adsf;//asdf¥1,234.13adsf//Label1.Text=string.Format({0:C3},b);//¥1,234.125//Label2.Text=b.ToString(C3);//¥1,234.125//Label1.Text=string.Format({0:d},a);//十进制--12345678//Label2.Text=b.ToString(d);//十进制--相同的类型,转换报错//Label1.Text=string.Format({0:e},a);//指数--1.234568e+007//Label2.Text=b.ToString(e);//指数--1.234125e+003//Label1.Text=string.Format({0:f},a);//定点数--12345678.00//Label2.Text=b.ToString(f);//定点数--1234.13//Label1.Text=string.Format({0:n},a);//数值--12,345,678.00//Label2.Text=b.ToString(n);//数值--1,234.13//Label1.Text=string.Format({0:x},a);//十六进制--bc614e//Label2.Text=b.ToString(x);//16--带有小数不能转换,出错//Label1.Text=string.Format({0:g},a);//通用为最紧凑--12345678//Label2.Text=b.ToString(g);//通用为最紧凑--1234.12543//Label1.Text=string.Format({0:r},a);//转来转去不损失精度--整数不允许用,报错//Label2.Text=b.ToString(r);//转来转去不损失精度--1234.12543b=4321.12543;a=1234;//自定义模式输出://0描述:占位符,如果可能,填充位//Label1.Text=string.Format({0:000000},a);//001234//Label2.Text=string.Format({0:000000},b);//004321//#描述:占位符,如果可能,填充位//Label1.Text=string.Format({0:#######},a);//1234//Label2.Text=string.Format({0:#######},b);//4321//Label1.Text=string.Format({0:#0####},a);//01234//Label2.Text=string.Format({0: