面向对象和组件的C#编程ch2

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

面向对象和组件的C#编程科学出版社第二章程序结构、变量、类型、运算符李军武汉大学测绘学院“我成长”网站第二章程序结构、变量、类型、运算符1234程序结构变量、常量和字量类型运算符5运算符的优先级和结合性2.1程序结构在1.7节,我们编写了一个Hello控制台程序,代码如下。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceHelloApp{classProgram{staticvoidMain(string[]args){Console.WriteLine(Hello!);}}}最简单的Hello控制台程序代码上面就是最简单的Hello控制台程序代码吗?其实代码还可简化成下面的形式:classProgram{staticvoidMain(){System.Console.WriteLine(Hello!);}}它没有了前面四条using语句,也没有了namespace,Main()中也没有参数;但在Console前添加了“System.”。它才是最简单的Hello控制台程序代码!2.1.1用类比理解程序结构房屋好比是类class,房屋名称为HappyHouse;房屋入口是类中的Main()函数。房主拥有的那块土地称为myLand,它由namesapce定义:namespacemyLand{classHappyHouse{staticvoidMain(){System.Console.WriteLine(Hello!);}}}类比1)WriteLine可类比为其它土地(System)中房屋(Console)里面的某个东西,用代码表示为:土地.房屋.东西;2)小数点“.”表示访问操作,例如myLand.HappyHouse.Main()表示:访问myLand中HappyHouse的Main成员。3)HappyHouse房主并没有定义WriteLine,但并不妨碍他借用别人的东西。他在Main中就借用了基类库BCL的函数:System.Console.WriteLine();2.1.2命名空间用C#的术语说,namespace关键字定义了命名空间,大括号中的东西称为类型,语法如下:namespace空间名称{定义类型}大括号界定了范围。空间名称要唯一,否则无法界定命名空间中的类型。类型中定义的东西称为成员。如下所示:namespace空间名称{类型1{成员}类型2{成员}…….}命名空间--一个分组符号namespace说明HelloApp是本项目的命名空间。命名空间就是一个程序集内相关类型的一个分组符号。System内建数据、数学计算、垃圾收集器System.Drawing处理图形和绘图,包括打印System.Data处理数据存取和管理,ADO.NETSystem.IO管理对文件和流的同步和异步访问System.Windows处理基于窗体的窗口的创建System.Reflection包含从程序集读取元数据的类System.Threading包含用于多线程编程的类System.Collections包含定义各种对象集的接口和类程序集、命名空间、类型和成员一个程序集可以包含任意个命名空间,每个命名空间又可以包含多种类型。用“对象浏览器”可见:程序集只有一个HelloApp命名空间,命名空间中的类型是Program类(class),Object是Program的基类;右边是Object类的成员。分析下面代码namespaceHelloApp//命名空间{inta;//定义变量:错误!staticvoidMain()//定义函数:错误!{}classProgram{}}2.1.3引用using“引用”反映了C#编程的组件思想:尽可能使用基类库或其它成熟的程序集。usingSystem;说明了HelloApp项目引用(using)了System命名空间。System命名空间中,提供了大量核心的类型,如System.Int32、string等类型,定义在内部程序集中。using简化了对特定命名空间中类型的引用方法。因为引用了System,所以编译器能够将Console类解析为这个命名空间的成员。如果没有引用System,将出现一个编译器错误。也可以使用完全限定名来使用Console类的函数:System.Console.WriteLine(Hello!);系统自动添加的引用--内部程序集许多核心的.NET命名空间包含在mscorlib.dll文件中。多数.NETFramework程序集都位于全局程序集缓存GAC的特定目录下(默认下C:\Windows\Assembly)。在创建本项目时,系统自动添加了一些全局程序集的引用,对它们的引用,仅仅通过using关键字来指定命名空间即可。引用外部程序集(doit)•不在上图中列出的程序集,都是外部程序集。对外部程序集,除了通过using关键字来指定命名空间,还需要告诉C#编译器包含引用类型的程序集的名字。例如,System.Drawing.Bitmap类型包含在另一个名为System.Drawing.dll的程序集中。引用它的方法如下:右键点击【引用】【添加引用】,然后在对话框中选择System.Drawing组件;见下图。添加System.Drawing.dll程序集在Program.cs代码前添加:usingSystem.Drawing;你就可以在项目中添加图形类型的具体引用了,例如在Main()中加上语句:BitmapMap=newBitmap(20,20);Bitmap是System.Drawing命名空间中的一个类。Map是Bitmap类型的变量,通过Map=newBitmap(20,20);语句被赋值为Bitmap对象;即调用Bitmap类的构造函数Bitmap(20,20)来创建的一个对象。也可说Map是用new实例化的一个Bitmap对象。注:命名空间与程序集一般是对应的,命名空间为***,它的程序集名字就为***.dll。2.1.4格式化输出在Main()中添加语句:Console.WriteLine({0},{1},Hello,World!);系统输出:“Hello,World!”字符串。{0}、{1}标记嵌入在字符串中,它是格式化输出方法,与C语言的printf()相似。可以使用这种花括号在文本内部指定占位符。在运行时,值会传入到WriteLine()来替代每一个占位符。数据的位置索引可以在字符串文本的任意位置放置占位符,而不需要按照递增的次序。例如代码:Console.WriteLine({1}+{0}+{2}={3},10,20,30,60);//数据的位置索引0123//输出:20+10+30=60后面数据10,20,30,60的位置索引总是依递增次序0,1,2,3;而占位符{n}中的n只能是0—3,{0}表明在占位符{0}上接受的是索引为0的数据(即10),{1}上接受的是索引为1的数据(即20);而{0}排在{1}的后面,故10在20的后面显示。格式化数值数据如果数值数据需要更精细的格式化,每一个占位符都可以(可选)包含不同的格式字符,下表显示了核心格式化选项。使用一些格式化标记(doit)•给定的占位符值以冒号为标记,将这些字符作为后缀(例如,{0:C}、{1:d}、{2:X})。•修改Main()方法,添加下面的语句,从而格式化一个固定值。例如://使用一些格式化标记Console.WriteLine(Thevalue88888invariousformats:);Console.WriteLine(cformat:{0:c},88888);//0代表占位符Console.WriteLine(d9format:{0:d9},88888);//补零到9位,前补零Console.WriteLine(f3format:{0:f3},88888);//f3保留小数点后3位Console.WriteLine(nformat:{0:n},88888);//注意,十六进制数的大小写形式决定了字母是大写还是小写。Console.WriteLine(Eformat:{0:E},88888);Console.WriteLine(eformat:{0:e},88888);Console.WriteLine(Xformat:{0:X},88888);Console.WriteLine(xformat:{0:x},88888);应用程序的输出(doit)在控制台应用程序外格式化数值数据•.NET字符串格式化字符不局限于在控制台程序中使用!同样的格式化语法可以在调用静态的string.Format()方法时使用。•如果我们需要对任何应用程序类型(桌面GUI程序、Web程序等)在运行时组合文本数据,这个方法就很有用。在消息对话框中显示://使用string.Format()来格式化字符串文本stringuserSt=string.Format(100inhexis{0:x},100);//需要引用System.Windows.Forms.dll才能编译这行代码System.Windows.Forms.MessageBox.Show(userSt);注意string.Format()是按照提供的标志进行格式化的。至此,我们就可以任意使用需要的文本数据了。2.2变量、常量和字量2.2.1变量的声明定义或声明变量的方法如下:类型var_name;类型var_name=初值;其中var_name是变量的名称(标识符)。注:如果是在类中定义的变量,声明时可加修饰符(细节见后面章节)2.2.3变量的种类和赋值2.2.2变量的命名(自学)变量分为八种类别:静态、非静态变量、数组元素、局部变量,值参数、引用参数、输出参数、数组参数。注意:在C#中,不能定义全局变量。【例2-3】变量的种类。classProgram//类{intx=1;//x是非静态变量publicstaticinty=2;//y是静态变量voidf(int[]s,intval,refinti,outintj)//数组s,值参数val{intw=2;//w是局部变量j=x+y+i+w;//j是输出参数}}x是非静态变量,y是静态变量,s是数组,val是值参数,i是引用参数,j是输出参数。2.2.4常量和字量•常量声明的语法为:修饰符const类型ConstName;在声明常量时,要用到const关键字。下面是一个声明常量的例子:publicconstdoublePI=3.1415926;•字量字量就是类型的字面值。它与常量本质上相同,但它更加简单:不用声明,把值直接写出来即可。例如,下面语句中出现的123就是整数字量:inti=123;字符串字量strings3=“Hello\nWorld!”;//串包含转义序列\n,换行Console.WriteLine({0},s3);运行结果:HelloWorld!逐字字符串字量逐字字符串字量由@字符和后面双引号中的多个字符组成,如果包含转义序列或Unicode字符,都作为一般字符处理。即“转义”失效。例如:strings1=@HelloWorld!;//有字符的串strings2=@Hello\nWorld!;//串包含转义序列\n,但作为二个一般字符处理,即:\和nConsole.WriteLine({0}{1},s1,s2);运行结果:HelloWorld!Hello\nWorld!空字量空字量只有一个:null。null本质的含义是没有任何值,即“空”。•null不属于任何类型,但它可隐式地转换为任何可接受空值的类型,如引用类型。字符串和object都是引用类型,所以下面语句是正确的:stringst=null;//null不等价于无字符的串objectobj=null;//表示obj没有任何值可空类型int?但下面的

1 / 73
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功