您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > CSharp入门经典学习笔记
第一章:C#简介1.1什么是.NetFramework特点:不限操作系统,不限应用程序类型,不限访问语言(通用类型系统,CommonStyleSystem,CST)。包含:代码库、.Net公共语言运行库(CommonLanguageRuntime,CLR)(负责管理用.Net库开发的所有应用程序的运行)MISL和JIT编译过程:C#代码Microsoft中间语言(MicrosoftIntermediateLanguage,MSIL)由VS完成本机代码由Just-In-Time编译器即JIT完成程序集编译应用程序时,所创建的MSIL代码存储在一个程序集中,程序集包括可执行应用程序文件(.exe)和其他应用程序使用的库(.dll)。除包含MSIL代码外还包含元信息(即程序集中包含的数据信息,也称为元数据)和可选的资源(MSIL使用的其他数据,例如声音文件和图片)。元信息允许程序集是完全自我描述的,不会出现无法将需要的数据添加到系统注册表中的情况。不必把运行应用程序所需要的所有信息都安装到一个地方。可以编写一些代码,执行多个应用程序所要求的任务。此时,通常把这些可重用的代码放在所有应用程序都访问的地方。在.NetFramework中,这个地方是全局程序集高速缓存(GlobalAssemblyCache,GAC)。方法是:将包含代码的程序集放在包含该高速缓存的目录下即可。托管代码用.NetFramework编写的代码在执行时是托管的,即CLR管理着运行程序,其方式是管理内存、处理安全性,以及允许进行跨语言调试等。在C#中,只能编写在托管环境下运行C#应用程序代码程序集本机代码的代码,我们使用CLR的托管功能,让.Net自己与操作系统交互。垃圾回收提醒:需要许多内存才能运行的代码应自己执行这样的检查,而不是坐等垃圾回收。链接在编译为MSIL语言的C#代码不一定包含在单独的文件中,可以把应用程序代码放在多个源代码文件中,再把它们编译到一个程序集中,这个过程称为链接。好处在于处理几个较小的文件比处理一个大文件简单的多。1.2什么是C#强大的语言:在C#中与C++比较高级的功能等价的功能(例如直接访问和处理系统内存),只能在标记为“不安全”的代码中使用。类型安全的语言:在类型之间转换时,必须遵守严格的规则。第三章:变量和表达式(P22)3.1C#的基本语法区分大小写代码的突出显示功能:#regionName#endregion3.2变量3.2.1简单类型(P26)String的字符数没有上限。占位符(格式字符串)的使用举例:IntmyInteger=17;StringmyString=“blarblar”;Console.WriteLine(“{0}{1}”,myInteger,myString);3.2.2变量的命名(P30)基本变量命名规则:变量名的第一个字符必须是字母、_或者@,其后的字符可以是字母下划线或数字。命名约定:Microsoft建议,对于简单的变量,使用camelCase规则,而对于比较高级的命名则使用PascalCase。3.2.3字面值(P31)逐字指定的字符串字面值:@”C:\Temp\MyDir\MyFile.Doc”;注意:字符串是引用类型,而其他类型都是值类型,所以字符串也可以指定null值,即字符串变量不引用字符串。3.2.4变量的声明和赋值3.3表达式(P34)3.3.1数学运算符举例说明运算符的位置与影响。问:intvar1,var2=5,var3=6;var1=var2++*--var3.var1的值是多少?答:5*5=25把运算符放在操作数的前面,则操作数实在进行其他任何计算前受到运算符的影响,而把运算符放在操作数的后面,则操作数是在完成表达式的计算后受到运算符的影响。3.3.2赋值运算符(P38)3.3.3运算符的优先级3.3.4命名空间Using用法:1、简化对已创建命名空间中包含名称的访问,例:NamespaceLevelOne{//nameOnedefined;}UsingLevelOne;//nameOne...2、为命名空间提供一个别名,作为using语句的一部分LevelOne命名空间中的代码把LevelOne.NameThree引用为NameThree,把LevelOne.LevelTwo.NameThree引用为LT.LevelTwo.NameThree。如果using语句声明如下:这样全局命名空间中的代码和LevelOne命名空间就可以使用LT.NameThree。注意:using语句本身不能访问另一个空间中的名称,除非命名空间中的代码以某种方式链接到项目上,或者代码是在该项目的源文件中定义的,或在链接到该项目的其他代码中定义的。Using语句只是便于我们访问这些名称,减少代码量。第四章:流程控制(P44)4.1布尔逻辑条件布尔运算符&&和||运算符与&和|运算符的区别是性能比较好:如果&&的第一个操作数为false,就不需要考虑第二个操作数的值了,同样,如果第一个操作数是true,||运算符就直接返回true,无需考虑第二个操作数的值。而&和|的操作数总是要计算的。故要尽可能使用&&和||。4.1.1位运算符ab相当于a*(2^b),而ab相当于a/2并丢弃余数进行b次。4.1.2布尔赋值运算符(P50)&=、|=、=、=……4.1.3运算符的优先级更新4.2goto语句(P52)4.3分支?:运算符最常见用法:Console.WriteLine(“In{0}year{1}youwillhaveabalanceof{2}”,totalYears,totalYears==1?””:”s”,balance);注意:Switch分支中,一个case语句结束不能进入下一个case,但有一种情况例外,即一次检查多个条件,如下:4.4循环4.4.1do循环do循环的结构如下:do{codetobelooped}while(test);提示:while后的分号是必须有的。4.4.2while循环4.4.3for循环4.4.4循环的中断(P69)break:立即终止循环。continue:立即终止当前循环,继续执行下一次循环。goto:可以跳出循环到已标志好的位置上。return:跳出循环及其包含的函数。第五章变量的更多内容(P73)5.1.1隐式转换隐式转换规则是:任何类型A,只要其取值范围完全包含在类型B的取值范围内,就可以隐式转换到类型B。其他具体见释疑文档。5.1.2显式转换(P75)两个关键字checked(expression)和unchecked(expression)例:shortA=267;byteB;B=checked((byte)A);5.1.3使用Convert命令进行显示转换5.2复杂的变量类型枚举,结构,数组5.2.1枚举(P81)EnumtypeName{Value1;Value2;…ValueN;}声明这个新类型的变量:TypeNamevarName;varName=typeName.value;枚举类型可提取的每个值都存储为该基本类型的一个值,在默认情况下,该类型为int。在枚举声明中添加类型,就可以指定其他基本类型:EnumtypeName:underlyingType{Value1;Value2;…ValueN;}枚举的基本类型可以是byte,sbyte,short,ushort,int,uint,long,ulong.还可以使用一个值作为另一个枚举的基础值。要获得枚举的字符串值,可以使用Convert.ToString(),使用(String)显示转换是不行的,因为需要进行的处理并不紧紧是把存储在枚举变量里中的数据放在string变量中,而是更复杂一些。另外,也可以使用变量本身的ToString()命令。也可以把string转换为枚举值,但其语法略复杂一些。有一个特定的命令用于这种类型的转换,即Enum.Parse(),使用方式如下:(enumberationType)Enum.Parse(typeof(enumberationType),enumberationValueString);5.2.2结构(P85)structtypeName{memberDeclarations}要让调用结构的代码访问该结构的数据成员,可用关键字public。5.2.3数组(P87)1、声明数组数组的初始化有两种方式:可以以字面形式指定数组的完整内容,也可以指定数组的大小,再使用关键字new初始化所有的数组元素。Int[]myIntArray={1,2,3,4,5};Int[]myIntArray=newint[5];(各元素默认数值为0)也可以使用非常量的变量来进行初始化:Int[]myIntArray=newint[arraySize];也可以两者结合的方式声明,数组大小必须与元素个数相匹配:Int[]myIntArray=newint[5]{1,2,3,4,5};也可以使用非常量的变量来进行初始化,但该变量必须是常量ConstintarraySize=5;Int[]myIntArray=newint[arraySize]{1,2,3,4,5};2、foreach循环foreach(baseTypenameinArray){//canusenameforeachelement}foreach对访问数组只进行只读访问,不能修改。3、多维数组double[,]hillHight={{1,2,3,4},{2,3,4,5},{3,4,5,6}};第一位指定花括号,第二位指定花括号内的元素。4、数组的数组声明:Int[][]jaggedIntArray;初始化的两种方式:可以初始化包含其他数组的数组,然后依次初始化子数组:jaggedIntArray=new[2][];jaggedIntArray[0]=newint[3];jaggedIntArray[1]=newint[4];也可以jaggedIntArray=newint[3][]={newint[]{1,2,3},newint[]{1},newint[]{2,3}};也可以简化,将数组的声明和初始化放在一行上:Int[][]jaggedIntArray={newint[]{1,2},newint[]{2},newint[]{3}};对变长数组可以使用foreach但通常需要嵌套该循环,才能得到实际的数据这是因为数组divisors1To10包含int[]元素,而不是int元素,必须循环每个子数组及该数组本身:5.3字符串的处理(P94)1、将字符串转为char数组:stringmyString=“Helloworld!”;char[]charArray=myString.toCharArray();2、将字符串转换为大写或小写形式:string.ToLower(),string.ToUpper3、删除字符串中的空格:string.Trim();4、删除其他字符5、删除字符串前面或后面的空格string.TrimStart();string.TrimEnd();6、处理字符串的空格,在字符串的左边或右边添加空格以达到要求长度string.PadLeft(desiredLength);string.PadRight(disiredLength);7、提供要添加到字符串上的字符StringmyString=“Aligned”;myString=myString.PadLeft(10,’-’);8、按提供符号拆分字符串Char[]separator={‘‘};myString.Split(separator);第六章:函数(P100)第七章:调试和错误处理(P126)7.1VisualStudio中的调试7.1.1非中断(正常)模式下的调试输出调试信息Debug.WriteLine();仅在调试模式下运行Trace.Write
本文标题:CSharp入门经典学习笔记
链接地址:https://www.777doc.com/doc-4373665 .html