1、C#学习笔记C#学习笔记第一章 C#简介第一节 什么是.NET Framework一、.NET Framework的内容术语表: CTS(Common Type System,通用类型系统) CLR(Common Language Runtime,公共语言运行库)二、如何用.NET Framework编写应用程序术语表: MSIL(Microsoft Intermediate Language,Microsoft中间语言) JIT(Just-In-Time,JIT编译器) GAC(Global Assembly Cache,全局程序集高速缓存)第二节 什么是C#一、用C#能编写什么样的应用程序
2、术语表: UI(User Interface,用户界面)二、本书中的C#第三节 Visual Studio 2005一、Visual Studio 2005 Express产品二、VS解决方案第四节 小结第二章 编写C#程序第一节 Visual Studio 2005 开发环境第二节 控制台应用程序一、Solution Explorer二、Properties窗口三、Error List窗口第三节 Windows Forms应用程序第四节 小结第三章 变量和表达式第一节 C#的基本语法C#控制台应用程序的基本结构第二节 变量一、简单类型二、变量的命名命名约定: Hungarian记号法 Pas
3、calCase,用于简单的变量 camelCase,用于高级的命名三、字面值用“”符号逐字地指定字符串四、变量的声明和赋值第三节 表达式一、数学运算符1、运算符的重载2、两个重要的概念: 用户输入 类型转换二、赋值运算符三、运算符的优先级四、命名空间第四节 小结第五节 练习1、 在下面的代码中,如何引用命名空间fabulous中的名称great?答:fabulous.great (super.smashing.great)2、 下面哪些不是合法的变量名?答:99Flake、3、 字符串supercalifragilisticexpialidocious是因为太长了而不能放在string变量中吗
4、?为什么?答:不是,string变量赋值需要把字符串置于双引号中 (不是,没有限制)4、 考虑运算符的优先级,列出下述表达式的计算步骤。答:resultVar+=(var1*var2)+(var3%var4/var5);首先计算(var1*var2)和(var3%var4/var5),在(var3%var4/var5)中从左向右依次计算;然后计算(var1*var2)+(var3%var4/var5)的和;接着计算resultVar+(var1*var2)+(var3%var4/var5)的和;最后把resultVar+(var1*var2)+(var3%var4/var5)的值赋给resul
5、tVar(resultVar+=(var1*var2)+var3)%(var4/var5);)5、 编写一个控制台应用程序,要求用户输入4个int值,并显示它们的乘积。提示:可以考虑使用Convert.ToDouble()命令,该命令可以把用户在控制台上输入的数转换为double;从string转换为int的命令是Convert.ToInt32()。答:详见具体程序。第四章 流程控制第一节 布尔逻辑&和|运算符与&和|运算符的区别一、位运算符二、布尔赋值运算符三、运算符的优先级更新第二节 goto语句第三节 分支一、三元运算符?:;二、if语句1、if语句没有结果,所以不在赋值语句中使用它2、
6、if语句的结果不能赋予一个变量3、使用if语句判断更多的条件三、switch语句用break、goto或return语句添加断点,可以确保在任何情况下,该结构都有一个有效的执行路径第四节 循环一、do循环用最少的代码有条件地格式化文本是“?:(三元)运算符”最常见的用法二、while循环三、for循环四、循环的中断五、无限循环第五节 小结第六节 练习1、 如果两个整数存储在变量var1和var2中,该进行什么样的布尔测试,看看其中的一个(但不是两个)是否大于十?答:var110&var210 (var110)(var210)2、 编写一个应用程序,其中包含联系(1)中的逻辑,让用户输入两个数字
7、,并显示它们,但拒绝接受两个数字都大于10的情况,并要求用户重新输入。答:详见具体程序。3、 下面的代码有什么错误?答:第四行,“=”错写成“=”。4、 修改Mandelbrot图像应用程序,要求用户输入图像的边界,显示选中的图像部分。当前代码输出的字符应正好能放在控制台应用程序的一行上。考虑如何使每个选中的图像正好占据大小相同的空间,以最大化可视区域。答:第五章 变量的更多内容第一节 类型转换一、隐式转换二、显式转换表达式的溢出检查环境,要用到两个关键字checked和unchecked,语法: Checked(expression); Unchecked(expression);三、使用c
8、onvert命令进行显式转换第二节 复杂的变量类型一、枚举1、定义枚举Enum typeName /: underlyingType 指定其他基本类型 value1, value2, value3, valueN2、声明这个新类型的变量typeName varName;3、赋值varName = typeName.value;4、把string转换为枚举值的命令(enumerationType)Enum.Parse(typeof(enumerationType), enumerationValueString);二、结构1、定义结构struct 声明采用如下形式: ; /可以使用关键字publ
9、ic2、声明这个新类型的变量typeName varName;3、通过句点字符访问这个组合变量中的数据成员varName.member;三、数组1、声明数组 ;初始化数组 以字面形式指定数组的完整内容 指定数组的大小,再使用关键字new初始化所有的数组元素 两种初始化方式的组合,但是数组大小必须与元素个数相匹配;如果使用变量定义其大小,该变量必须是一个常量2、foreach循环foreach ( in ) / can use for each elementforeach循环对数组内容进行只读访问3、多维数组 二维数组声明, ; 多维数组声明, ;4、数组的数组 ;第三节 字符串的处理 .To
10、CharArray(); .ToLower(); .ToUpper(); .Trim(); .TrimStart(); .TrimEnd(); .PadLeft(); .PadRight();第四节 小结第五节 练习1、 下面的转换哪些不是隐式转换?答:int转换为shortbool转换为string2、 short类型包含彩虹的颜色,再加上黑色和白色,据此编写color枚举的代码。这个枚举可以使用byte类型吗?答:enum color:short red=1, orange=2, yellow=3, green=4, blue=5, Indigo=6, violet=7, black=8,
11、 white=9 可以(enum color:short Red,Orange,Yellow,Green,Blue,Indigo,Violet,Black,White 可以)3、 修改第4章的Mandelbrot图像生成示例,使用下面的结构表示复杂复杂的数字?答:4、 下面的代码可以成功编译吗?如果不能,为什么?答:不能,未给数组赋予正确的值。(不能,没有结束分号;该数组只包含5个元素,无法存储第六个;再给字符串数组元素赋值时没有加双引号)5、 编写一个控制台应用程序,它接收用户输入的一个字符串,将其中的字符以与输入相反的顺序输出。答:详见具体程序。6、 编写一个控制台应用程序,它接收一个字符
12、串,用yes替换字符串中所有的no。答:详见具体程序。7、 编写一个控制台应用程序,给字符串中的每个单词加上双引号。答:详见具体程序。第六章 函数第一节 定义和使用函数函数定义由以下几部分组成: 两个关键字 函数名后跟圆括号 一个要执行的代码块,放在花括号中函数名一般采用PascalCasing形式来编写调用函数:输入函数名,后跟空括号即可一、 返回值当函数返回一个值时,可以用下面两种方式修改函数: 在函数声明中指定返回值的类型,但不使用关键字void 使用return关键字结束函数的执行,把返回值传送给调用代码static () return ;return语句必须在函数的闭合花括号之前处理
13、在用void关键字声明函数时,不能在return关键字和其后的分号之间提供返回值二、 参数当函数接受参数时,就必须指定下述内容: 函数在其定义中指定接受的参数列表,以及这些参数的类型 在每个函数调用中匹配的参数列表static ( ,) return ;1、 参数匹配要匹配参数的类型、个数和顺序必须匹配函数的签名2、 参数数组C#允许为函数指定一个(只能指定一个)特定的参数,这个参数必须是函数定义中的最后一个参数,称为参数数组。参数数组可以使用个数不定的参数调用函数,它可以使用params关键字来定义static ( ,params ) return ;调用格式:(,);3、 引用参数和值参数
14、ref参数:ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。例如:class RefExample static void Method(ref int i) i = 44; static void Main() int val = 0; Method(ref val); / val is now 44 备注 属性不是变量,因此不能作为 ref 参数传递;必须使用初始化过的变量示例 按引用传递值类型(如上所示)是有用的,但是 ref 对于传递引用类型也
15、是很有用的。这允许被调用的方法修改该引用所引用的对象,因为引用本身是按引用来传递的。下面的示例显示出当引用类型作为 ref 参数传递时,可以更改对象本身。class RefRefExample static void Method(ref string s) s = changed; static void Main() string str = original; Method(ref str); / str is now changed 4、 输出参数out参数: 把未赋值的变量用作ref参数是非法的,但可以把未赋值的变量用作out参数 另外,在函数使用out参数时,该参数必须是看作还未赋
16、值,即调用代码可以把已赋值的变量用作out参数,存储在该变量中的值会在函数执行时丢失out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。例如:class OutExample static void Method(out int i) i = 44; static void Main() int value; Method(out value); / value is now 44 尽管作为 out 参数传递的变量不需要在传递之前进行初始化,但需要调用
17、方法以便在方法返回之前赋值。ref 和 out 关键字在运行时的处理方式不同,但在编译时的处理方式相同。因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法。例如,从编译的角度来看,以下代码中的两个方法是完全相同的,因此将不会编译以下代码:class CS0663_Example / compiler error CS0663: cannot define overloaded / methods that differ only on ref and out public void SampleMethod(out int i) public void
18、SampleMethod(ref int i) 但是,如果一个方法采用 ref 或 out 参数,而另一个方法不采用这两类参数,则可以进行重载,如下所示:class RefOutOverloadExample public void SampleMethod(int i) public void SampleMethod(out int i) 备注 属性不是变量,因此不能作为 out 参数传递。示例 当希望方法返回多个值时,声明 out 方法很有用。使用 out 参数的方法仍然可以将变量用作返回类型(请参见 return),但它还可以将一个或多个对象作为 out 参数返回给调用方法。此示例使用
19、 out 在一个方法调用中返回三个变量。请注意,第三个参数所赋的值为 Null。这样便允许方法有选择地返回值。class OutReturnExample static void Method(out int i, out string s1, out string s2) i = 44; s1 = Ive been returned; s2 = null; static void Main() int value; string str1, str2; Method(out value, out str1, out str2); / value is now 44 / str1 is now
20、 Ive been returned / str2 is (still) null; 第二节 变量的作用域局部变量与全局变量使用static或const来定义全局变量,static允许修改全局变量的值,而const禁止修改;如果局部变量和全局变量同名,全局变量就会被屏蔽一、 其他结构中变量的作用域“最佳实践”,在声明和初始化所有的变量后,再在代码块中使用它们二、 参数和返回值与全局数据一般情况下,最好使用参数,而不使用全局数据,但有时使用全局数据更合适第三节 Main()函数Main函数可以使用四种签名: static void Main() static void Main(string a
21、rgs) static int Main() static int Main(string args)第四节 结构函数关键字不是结构函数所必须的第五节 函数的重载函数重载允许创建同名的多个函数,这些函数可使用不同的函数类型第六节 委托委托是一种可以把引用存储为函数的类型,使用delegate关键字第七节 小结第八节 练习1、 下面两个函数都有错误,请指出这些错误。答:第一个函数定义的返回值类型是bool,但是函数体没有返回值;第二个函数的参数数组必须定义为参数列表的最后一个参数。2、 编写一个应用程序,该程序使用两个命令行参数,分别把值放在一个字符串和一个整形变量中,然后显示这些值。答:详见具
22、体程序。3、 创建一个委托,在请求用户输入时,使用它模拟Console.ReadLine()函数。答:delegate string ProcessInput(string param); ProcessInput process; process=new ProcessInput(Console.ReadLine(); (class Class1 delegate string ReadLineDeglegate(); static void Main(string args) ReadLineDelegate readLine=new ReadLineDelegate(Console.Re
23、adLine); Console.WriteLine(“Type a string:”); string userInput=readLine(); Console.WriteLine(“You typed: 0”,userInput); )4、 修改下面的结构,使之包含一个返回订单总价格的函数。答:struct order public string itemName; public int unitCount; public double unitCost; static double Total(int count,double cost) double total; total=cou
24、nt*cost; return total; (struct orderpublic string itemName;public int unitCount;public double unitCost;public double TotalCost()return unitCount * unitCost;)5、 在order结构中添加另一个函数,该结构返回一个格式化的字符串,以适合的值替换用尖括号括起来的斜体条目。答:struct order public int unitCount; public string itemName; public double unitCost; pub
25、lic double totalCost; static string OutputTotal() Console.WriteLine(“Order Information:0 1 items at $2 each,total cost $3”, unitCount, itemName, unitCost, totalCost); (truct orderpublic string itemName;public int unitCount;public double unitCost;public double TotalCost()return unitCount * unitCost;p
26、ublic string info()return “Order information: “+ unitCount.ToString() + ” “ + itemName + “items at $” + unitCost.ToString() + “each, total cost $” + TotalCost().ToString(); 第七章 调试和错误处理第一节 Visual Studio中的调试一、 非中断(正常)模式下的调试输出调试信息 Debug.WriteLine() Trace.WriteLine()两个函数中惟一的字符串参数用于输出消息,而不需要使用X语法插入变量值,必须
27、使用+运算符在字符串中插入变量值using System.Diagnostics; /用于简化函数访问跟踪下标的方法在Release模式下没有执行Debug.WriteLine()函数其它函数: Debug.Write() Trace.Write() Debug.WriteLineIf() Trace.WriteLineIf() Debug.WriteIf() Trace.WriteIf()1、 跟踪点2、 诊断输出与跟踪点二、 中断模式下的调试1、 进入中断模式断点,是源代码中自动进入中断模式的一个标记,它可以配置为五种方式进入中断模式的其他方式 在产生一个未处理的异常时选择进入该模式 生成一个判定语句时中断,包含两个版本 Debug.Assert() Trace.Assert()这两个函数带三个参数(参数的含义)2、 监视变量的内容3、 单步执行代码4、 Immediate和Command窗口5、 Call Stack窗口第二节 错误处理异常1、 trycatchfinally术语表: SEH(Structured Except
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1