版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2020年8月28日,第 2 章 C#语言基础,2020年8月28日,2.1 C#语言及其特点,C#读作“C sharp”,它是Microsoft开发的一种用于网络开发的新语言,结 合了C/C+的强大功能、Visual Basic的易用性。,2020年8月28日,2.1 C#语言及其特点,C#是一种源自于C和C+的、简单的、完全面向对象的程序设计语言。C#语言虽然是从C和C+演变而来,但在一些诸如命名空间、类、方法和异常处理等特定领域进行了很大的改进与优化。 C#它不仅适合于网络开发,也可以开发古典风格的Windows应用程序。 跨平台性。为了实现跨平台,C#采用了即时编译器(Just In
2、Time,JIT),但它不是简单地移植和套用原有的JIT技术,而是JIT的发展与提升。 C#的面向对象的程度要比C+还要高。C#中的基本类型都是基于对象的,C#为每一个基本类型都内建了相应的类,如Int32 是系统提供的一个类,基本类型int就映射为类Int32。而C+中找不到这样的内建关系,C+只是提供了操作这些基本类型的工具类,int 在C+中并不是基于对象的。 C#较C+在面向对象的开发上更简单,使用户使用起来更方便,而且 提供了非常强大的兼容性。,C#语言的主要特征,2020年8月28日,2.1 C#语言及其特点,C#源于微软的C+,又借鉴了Java的一些设计方法。下面,比较C#与C+
3、和Java 的差异。,2020年8月28日,2.2 中间语言代码与.NET的跨平台,所谓“中间代码”是一种结构简单、含义明确的记号系统。中间代码是源程序的一种内部表示,或称中间语言。中间代码的作用是可使编译程序的结构在逻辑上更为简单明确,特别是可使目标代码的优化比较容易实现。,什么是中间语言代码,在以往的程序开发中,对程序源代码进行编译后得到的.exe文件都是为硬件所识别的机器代码,可直接运行。但是这种机器码限制了程序的可移植性,因为对于不同的计算机或者不同操作系统,其指令系统是不同的,这种硬件上的差异导致在不同类型的计算机上使用的计算机语言不同,需要针对不同类型的CPU开发不同版本的编译器。
4、例如,在Windows平台上编译的程序不能在Linux系统上运行,除非用Linux系统上的编译器重新编译。,.NET框架上提供了一个可移植的交叉语言平台,使不同语言开发的程序可以在不同的环境、不同的CPU上运行。.NET框架的这种跨平台程序移植能力是通过中间语言(Microsoft Intermediate Language,MIL)来实现的。用.NET框架支持的语言编写的源程序编译后生成的.exe文件不能被计算机直接识别运行,这样的.exe文件被称为Microsoft中间语言文件。本质上说,MIL是内存中的源程序。,2020年8月28日,2.2 中间语言代码与.NET的跨平台,MIL文件是通
5、过.NET Framework的虚拟机被称之为通用语言运行时.NET CLR执行。在执行的时候,MIL文件会自动调用CLR中的JIT再次编译,生成机器码,由计算机的CPU处理执行。其运行过程如下图所示。 图 C#程序的编译执行过程,C#生成的中间语言文件MIL与其他的.NET语言(Visual Basic、J#、C+等)生成的MIL语言完全相同。由于CLR也是共用的,因此,不同语言开发的程序都可以在.NET框架的平台上运行。 在程序执行时,JIT会分析中间代码并动态产出高效率的机器执行码,因此,其运行速度快;另外,Java虚拟机仅局限于Java语言程序,而.NET框架中的JIT是语言交叉的,支
6、持多种语言。,中间语言代码的执行,2020年8月28日,一个简单的C#程序,一般高级语言编程需要经过三个过程,即: (1)源程序编辑 (2)目标程序编译生成 (3)可执行程序运行 C#编程也不例外,也包括源程序的编辑、编译生成中间语言和解释运行中间码几个步骤。,C#的编辑与运行,如果计算机上没有安装.Net Framework,那么这些程序将不能够被执行。在程序执行时,.Net Framework将中间代码翻译成为二进制机器码,从而使它得到正确的运行。最终的二进制代码被存储在一个缓冲区(Buffer)中。所以一旦程序使用了相同的代码,那么将会调用缓冲区中的版本。这样如果一个.Net程序第二次被
7、运行,那么这种翻译不需要进行第二次,速度明显加快。,具体来讲,C#程序的开发方式如下:使用任何文本编辑器(如:记事本、Editplus等)编写程序代码,并以.cs保存源文件,使用命令行编译器(csc.exe)进行编译;运行编译后的可执行程序文件。,2020年8月28日,2.3 一个简单的C#程序,下面以一个最简单的C#程序为例来分别介绍这三个过程。 程序2.1是一个最简单的C#程序的例子 其功能是在屏幕上输出: “Hello,欢迎来到 C# Word !”。 Hello.cs using System; namespace mynamespace class myclass static vo
8、id Main() Console.WriteLine(“Hello, 欢迎来到 C# Word !); Console.ReadLine(); ,首先引用了系统命名空间System,因为所有的程序都要用到该命名空间下的类。 接着创建了一个命名空间mynamespace,在该命名空间声明并定义了一个类mycalss,该类包含了一个静态的成员方法Main(),作为执行程序的入口。该方法调用控制台(Console)的WriteLine方法输出“Hello,欢迎来到 C# Word !”。,2020年8月28日,2.3 一个简单的C#程序(续),建立了该C#程序文件后,下一步就是用.NET框架中包含
9、的编译器 csc.exe 来编 译该程序文件。编译方式如下: csc Hello.cs 需要注意的是:编译器文件csc.exe 是在DOS下运行的,编译时必须进入DOS环 境,并且设置该执行文件所在的路径 path = C:WINDOWSMicrosoft.NETFrameworkv1.1.4322,或 v2.0.50727 其中v1.1.4322和v2.0.50727是版本号,其中v1.1.4322是版本号。,C#的编辑与运行,2020年8月28日,2.3 一个简单的C#程序(续),编译完成后,就可以运行该程序了。由于是控制台方式,必须在DOS环境下 运行,在DOS方式下键入Hello,20
10、20年8月28日,2.3 一个简单的C#程序(续),如果安装了Visual Studio.NET,那么可以在Visual Studio .NET 2003 或Visual Studio .NET 2005命令提示下来执行 csc.exe 编译器,此时,不需要再指定 csc.exe 的路径。 Visual Studio Tools-Visual Studio 2005命令提示 C#编译器不仅可以生成.exe文件,也可以通过选项/t:library生成.dll文件,其中的t的含义是target。 程序2.1中如果要生成.dll文件,编译方式如下: csc /t:library Hello.cs,2
11、020年8月28日,2.3 一个简单的C#程序(续),如果觉得DOS环境下的编译太繁琐,那么EditPlus是一个很不错的选择 EditPlus是一个功能强大的文本编辑器,EditPlus对于 HTML、CSS、PHP、ASP、Perl、C/C+、C#及 VBScript 的语法突显使得它特别适合编辑文本格式的各种程序代码文件,尤其是它的HTML 页面预览功能使得它适合编辑HTML文件,并且还具有FTP 命令可以实现本地文件上传到 FTP 服务器的功能,同时它提供了支持多种语言的集成 编译、运行环境。,EditPlus编辑、编译与运行环境,2020年8月28日,EditPlus编译环境的设置,
12、下面以C#语言为例详细说明编译环境的设置 在“工具参数选择用户工具”选项页进行设置 设置步骤如下: 设置组名称,这里也可以不设置,取缺省的设置Group 1 单击“添加工具应用程序”按钮,进入设置界面 在菜单文本编辑框输入菜单项的名次 在命令编辑框输入编译器(csc.exe)所在的路径和文件名称 各种参数可以在文本框右侧的下拉菜单中获取。 以C#为例,其编译环境设置参数如下: 菜单文本:编译 C# 命令:C:WINDOWSMicrosoft.NETFrameworkv1.0.3705csc.exe 参数:$(FileName) 初始目录:$(FileDir) 捕获输出:开启,2020年8月28
13、日,EditPlus编译环境的设置(续),打开EditPlus文本编辑器环境后,选择“工具”“参数选择”选项,打开“参数选择”对话框,选择“用户工具”选项进行设置,设置的界面如下图 所示。,2020年8月28日,EditPlus编译环境的设置(序),设置完毕后,你就可以在“工具”菜单运行对应的工具了。编译结果会显示在底部的输出窗口,可以通过“用户工具栏”的快捷按钮编译当前编辑的文件。,2020年8月28日,在EditPlus下运行C#程序,编译完成后,可以在EditPlus环境下直接运行,要在EditPlus环境下运行已编译后的.exe 文件,你可以进行如下设置(此时可执行文件需要和编译文件同
14、名): 菜单文本:C#运行 命令:$(FileNameNoExt) 参数:无 初始目录:$(FileDir) 以C#为例,其编译环境设置参数如下: 菜单文本:C#编译(.exe) 命令:C:WINDOWSMicrosoft.NETFrameworkv1.0.3705csc.exe。 参数:$(FileName)。 初始目录:$(FileDir)。 捕获输出:(True)。,2020年8月28日,2.4 C#的命名空间,命名空间是一种松散的类的集合。C#中的命名空间把各种类组织在一起,使得程序功能清楚、结构分明。使用命名空间有利于实现不同程序间类的重用,也有利于类的组织、管理与使用。 一般不要求
15、处于同一个命名空间中的类有明确的相互关系,如包含、继承等。但是由于同一命名空间中的类在默认情况下可以互相访问,所以为了方便编程和管理,通常把需要在一起工作的类放在一个命名空间中。 命名空间可以看做一个由类的集合构成的组件(Component)。类库中的类和接口都必须在相应的命名空间中定义,因此程序中多个命名空间都可以含有相同的成员,却不会发生冲突。,什么是命名空间,2020年8月28日,2.4 C#的命名空间,将类组织在不同的命名空间的目的是为了更好地利用命名空间中的类。可以使用如下两种方式来引用命名空间中的类。 1. 使用命名空间名作为类名前缀 可以通过类的完整命名空间(可以看做树的节点的路
16、径)来唯一地定位命名空间中的任何类。比如,要引用表示文件系统的类,可以使用以下代码: System.IO.File System.IO是命名空间,而File是特定的类。不同的命名空间中,可以定义同名的类。例如: namespace First / class A的定义 namespace Second /class A的定义 两个命名空间中都定义了类A,但是可以独立使用First.A和Second.A,相互不会干扰。,命名空间的引用,2020年8月28日,2.4 C#的命名空间,2加载需要使用的命名空间 使用上面的方法,引用一个类时必须附加一个包含命名空间名的前缀,编程中使用起来非常麻烦。另一
17、个解决的方法是在程序文件的开始部分利用using 语句将需要使用的整个命名空间加载到当前程序中,这样在程序中需要引用这个类的地方就不需要再使用命名空间名作为前缀。例如: using System; 加载一个命名空间后,凡是这个命名空间中的类,都不需要再使用命名空间名作为前缀。 例如: using System; namespace mynamespace class myclass static void Main() Console.WriteLine (Hello, Wellcome to C# World!); Console.ReadLine(); ,2020年8月28日,2.5 C#
18、程序的构成,不同的程序文件虽然功能和内容不同,但都有基本统一的框架结构。下面仍以例子程序2.1为例来说明C#程序的构成。 using System; /加载.NET框架类提供的系统命名空间System namespace mynamespace /声明一个命名空间 mynamespace class myclass /声明一个类定义 static void Main() Console.WriteLine (Hello, Welcome to C# World !); ,2020年8月28日,2.5 C#程序的构成,C#程序的典型结构特征 C#用using导入命名空间。所有用到的类都要导入对应
19、的命名空间。 用namespace 关键字声明一个命名空间,每个C#源代码文件可以包含一个或多个命名空间。类、结构、接口等的定义必须包含在命名空间中。 C#源程序是由类定义组成的,是类的集合。就好像任何一个C程序都是由若干个函数组成的一样。每个程序中可以定义若干个类,但是只有一个类是主类(包含Main方法的类),它是C#程序执行的入口点。但作为动态链接库(.dll)的C#程序的源代码文件不必要求有Main方法,可以由若干相互关联或独立的类构成。使用关键字class来定义类,每个类的定义由类头和类体部分组成。类头部分除了声明类名之外,还可以说明类的继承特性。类体部分包括属性和方法这两种类的成员。
20、 在C#中不存在全局方法和变量,所有的变量和方法都包含在类的定义中。类体中通常有两种成员:一种是域,包括变量、常量、对象数组;另一种是方法 是类似于C中的函数的代码单元块。,2020年8月28日,2.5 C#程序的构成,C#程序一般都有如下的典型的框架结构: using System; namespace mynamespace1 /命名空间mynamespace1 class myclass1 /类定义 struct mystruct /结构定义 interface myinterface /接口定义 delegate void MyDelegate(string name);/委托定义 e
21、num myenum /枚举定义 namespace mynamespace2 /命名空间mynamespace2 class myclass2 /类定义 static void Main(string args) /类的Main方法 Console.WriteLine (Hello, Welcome to C# World !); ,2020年8月28日,2.6 C#的类和对象定义,下面这个例子示范如何创建和使用用户定义的类以及如何创建动态链接库。利用文本编辑器创建两个文件。内容如下。 第一个是Apple.cs public class Apple private string variet
22、y = ; public Apple(string appleVariety) this.variety = appleVariety; public void outputVariety() System.Console.WriteLine (variety); ,首先,定义了一个新的用户定义类Apple我们为Apple类的声明加上了public修饰符(public class Apple),这样其他类就可以创建Apple类的实例。 接着 定义了实例变量variety。修饰符private表示只有在Apple类的内部才可以直接访问variety变量。这是一种常见的面向对象编程习惯,称为封装。
23、 第3行定义了Apple类的构造方法,描述如何创建类实例的蓝图。构造方法总是和类具有相同的名字。 Apple类的另一个方法是outputVariety(),2020年8月28日,2.6 C#的类和对象定义,第二个文件是Example.cs,内容如下。 Example.cs class Example static void Main() Apple mac = new Apple (Macintosh ); Apple gra = new Apple (Granny Smith); Apple cor = new Apple (Cortland); mac.outputVariety(); g
24、ra.outputVariety(); cor.outputVariety(); ,Example类是创建并使用用户定义类Apple的实例。 用new操作符创建了3个Apple类的实例。创建类的实例时,new操作符将自动调用类的构造方法。 创建了3个Apple类的对象之后,依次调用这3个对象的outputVariety方法,由outputVariety方法输出这3个对象里variety的值。,2020年8月28日,2.6 C#的类和对象定义,下面来编译和运行这个例子 首先要把Apple类编译成动态链接库: csc /t:library Apple.cs /t:library表示不要创建执行文件
25、,上面的命令将生成一个Apple.dll文件。 接下来编译Example.cs,编译命令如下所示: csc /reference:Apple.dll Example.cs 其中,参数/reference:Apple.dll表示Example.cs要用到Apple.dll中的类、属性或方法,如果Apple.dll文件是保存在当前应用的/bin子目录下,编译时可以省略/reference:Apple.dll参数,编译器会自动寻找所用到的.dll文件。 编译后得到了执行文件Example.exe,执行这个文件可以在控制台上看到如下输出: Macintosh Granny Smith Cortland
26、,2020年8月28日,2.7 C#的格式与数据类型,标识符是用于标记变量、常量、方法、对象、类等元素的字符串,这个字符 串是这些元素的定义、赋值和引用时使用的唯一标识。标识符由编程者自由 指定,但必须遵循一定的语法规定。 C#对于标识符的定义有如下的规定: 标识符的首字符必须为字母、下划线或,接下来的字符可以是字母、数字或下划线。 标识符中不应使用C的保留字(见表2.2),如果一定要用保留字,最好使用作为前缀。 C#是大小写敏感的语言。class和Class。System和system分别代表不同的标识符,在定义和使用时要特别注意这一点。 允许在标识符中使用Unicode转义符(见表 2.3
27、)。,C#的标识符,标识符实例: 下面的标识符是正确的: myClass _var BIGNUMBER 下面的标识符不正确: 6TerOfButton class shoe-size 为了便于理解和阅读,应该使标识符能在一定程度上反映它所表示的变量、常量、对象或类的语义。,2020年8月28日,2.7 C#的格式与数据类型,在书写C#源代码时,应遵循以下的基本规则: 每行以分号“;”结尾。 空行和缩进被忽略。 多条语句可以处于同一行,之间以分号“;”分隔即可。 注释语句有两种形式: / 这是我的注释 /*这是我的注释 华中科技大学*/,C#书写规则,注意事项 习惯VB的人很容易漏了语句末尾的分
28、号,或者随便使用变量但是不声明,这在C#默认情况下是不允许的; Visual Basic中数组元素用()引用,但C#中数组元素要用方括号引用。,2020年8月28日,2.7 C#的格式与数据类型,最常见的两大类数据类型是值类型和引用类型。值类型也可以称为基本数据 类型,包含简单类型(如整型int、浮点型float等)、枚举类型、结构类型3种。 基本数据类型是C#语言中提供的、无法再分解的一种预定义类型 引用类型包含的数据类型有字符串类型、数组类型、类类型、对象类型、接口类型和代理类型。 表2.4列出了C#中定义的所有数据类型,可以看出C#的数据类型的设置与C 语言相近,但C#对其数据类型的取值
29、范围作了扩充。其中string和object类 型是引用类型,其他的都是基本数据类型。,C#的数据类型,需要说明的是:C#的字符数据类型char与其他语言相比有较大的改进。C语言等的字符类型是采用ASCII编码 。 C#的字符类型采用了一种新的国际标准编码方案,即Unicode编码。共可表示65535个不同的Unicode字符,无论东方字符还是西方字符都可以统一用一个字符表达。引用类型string表示Unicode字符序列。,2020年8月28日,2.7 C#的格式与数据类型,C#语言是强制类型语言,编译器会自动检测程序代码中的数据类型是否相容,如果不相容则自动进行数据类型转换。 编译器能够自
30、动进行的数据类型转换称为隐式转换。隐式转换不会发生数据的损失,也无须程序设计人员介入,由系统自动完成。 例如,将byte类型的值赋给int变量时,系统会自动将其转换为int类型。 byte bb = 50 ; int ii = bb ; 通常,从小值域范围的类型(如short)到大值域范围的类型 (如int、long)系统会自动 进行隐式转换。,C#的数据类型转换,2020年8月28日,2.7 C#的格式与数据类型,如果编译器不能完成隐式转换,就需要用户进行数据类型的显式转换。C#语言的数据类型显式转换有以下3种方式。 1使用强制类型转换运算符“()” 转换格式为: (类型)数据 ; 例如,i
31、i 是 int类型,要将其转换为 short类型,可使用下面的强制类型转换语句: int ii = 50 ; short ss = (short)ii ;,C#的数据类型转换,2020年8月28日,2.7 C#的格式与数据类型,2使用System.Convert类的静态成员方法 Convert类位于命名空间System中,其静态方法如表 2.5所示。 例如: int ii = 100; string str = System.Convert.ToString(ii) ; 3使用.NET框架提供的Parse()方法 在.NET中,每种基本数据类型都定义了相应的结构,结构都封装了与名称对应的数据类
32、型,并且带有一个静态的Parse()方法,用于相应的类型转换。 例如: float f = 200; string s = f.ToString() ;,C#的数据类型转换,2020年8月28日,2.7 C#的格式与数据类型,2使用System.Convert类的静态成员方法 Convert类位于命名空间System中,其静态方法如表 2.5所示。 例如: int ii = 100; string str = System.Convert.ToString(ii) ; 3使用.NET框架提供的Parse()方法 在.NET中,每种基本数据类型都定义了相应的结构,结构都封装了与名称对应的数据类型
33、,并且带有一个静态的Parse()方法,用于相应的类型转换。 例如: float f = 200; string s = f.ToString() ;,C#的数据类型转换,2020年8月28日,2.7 C#的格式与数据类型,常量是在程序运行过程中保持不变的量。常量有直接常量和符号常量。 直接常量是在程序中直接书写的数值或字符串等,如123、66.88,“This is a message for C#”。 符号常量是用 const修饰的、具有特定值的标识符,其声明方式为: const 类型 常量名 = 初始值; 例如: const double pi = 3.1415926; const st
34、ring univName = “HUST” ; 符号常量必须在声明的时候赋初值,而且一旦初始化后,就不能再赋值。C#中常用的常量有布尔常量、整型常量、字符常量、字符串常量和浮点常量。,C#常量,2020年8月28日,2.7 C#的格式与数据类型,1布尔常量 布尔常量包括true和false,分别代表真和假。而在C#中,bool类型不能与其他数据类型转换。 2整型常量 整型常量可以用来给整型变量赋值。如-386L、017777l。 3浮点常量 浮点常量表示可以含有小数部分的数值变量。可以分为一般浮点常量float类型和双精度浮点常量double类型两种。浮点常量用F、f表示,如32.4F、54
35、3.62f;双精度浮点常量用D或d表示,如700041.273d或700041.273,系统默认其为双精度浮点常量。浮点常量还有指数表示法,如3.0513E3是指数形式表示的常量。 4字符常量 字符常量用一对单引号括起的单个字符表示。如a、Z、8、#,也可以是要表示的字符所对应的Unicode码。 5字符串常量 字符串常量是用双引号括起的一串若干个Unicode字符。双引号必须在源代码的同一行上。可以使用连接操作符(+)把两个或更多的字符串常量串接在一起组成一个更长的字符串。例如:How do you do? +n,2020年8月28日,2.7 C#的格式与数据类型,变量是在程序的运行过程中数
36、值可能发生变化的数据,通常用来记录运算中间结果或保存数据。C#中的变量必须先声明后使用,声明变量包括指明变量的数据类型和变量的名称,必要时还可以指定变量的初始数值。变量的声明格式如下。 访问修饰符 数据类型 变量名 =初始值; 变量声明是一个完整的语句,所以它与其他C#语句一样需要用分号结束。 例如: int size=5;/声明整数型变量size,并对其初始化 float f;/声明浮点型变量f f=4.67f;/给变量赋值,C#的变量,2020年8月28日,2.7 C#的格式与数据类型,变量的命名应遵循标识符命名规则,变量声明时可以直接给变量赋初值。在C#中要求对变量明确赋初值,使用未初始
37、化的变量会导致编译错误。如果变量声明时没有给变量赋初值,变量会带有表 2.7所示的默认的初始值。 变量的定义举例如下: int ii = 1; string cname = “RMIT University”; Boolean married = true;,C#的变量,C#的变量有一定的生存期和有效范围。C#变量的有效范围就是声明它的语句所在的语句块,一旦程序的执行离开了这个语句块,变量就变得没有意义了。例如: int sum=0; for(int i=0;i10;i+) sum+=i; /在这对之外,sum不存在了 C#程序代码可以看做类的集合,不能在类之外声明任何的变量和方法 因此在C#
38、中不存在类似其他语言中的全局变量。,2020年8月28日,2.7 C#的格式与数据类型 枚举与数组,枚举类型的取值范围是有限的,可以一一列举,例如星期、月份、员工的性别等,实际上枚举可看成是一组相关的符号常量的集合。C#语言中,枚举类型使用关键字enum声明,其语法格式如下: 访问修饰符 enum 类型名 :基类型 枚举值列表 其中,基类型表示枚举值的基本类型,默认类型是 int。枚举值列表之间用逗号“,”分割,对于枚举值的访问必须用枚举类型名进行限定。例如,下面定义了一个Week的枚举: enum Week Sunday, Monday, Tuesday, Wednesday, Thursd
39、ay, Friday, Saturday 值得注意的是枚举类型值与整型之间要进行显式的转换。例如: int w = (int)Weeks.Saturday;,默认情况下,枚举的第一个常数的值初始化为0,后面的值初始化为前面的值加1。例如,上面的Week枚举中Sunday值为 0, Monday值为 1, Tuesday 值为 2, Wednesday 值为 3, Thursday 值为 4, Friday 值为 5, Saturday 值为 6。也可以使用赋值语句改变枚举中常数的初始值。例如,上面的Week枚举可以表示为: enum Week Sunday, Monday = 10, Tues
40、day, Wednesday, Thursday, Friday, Saturday 上面的Weeks枚举中Sunday值为 0, Monday值为 10, Tuesday 值为 11(前面的Monday值加 1), Wednesday 值为 12依此类推,Saturday的值为 15。,C#的枚举,2020年8月28日,2.7 C#的格式与数据类型 枚举与数组,数组是一种常用的数据结构,相同数据类型的元素按一定顺序线性排列就构成了数组,它包含若干个数组元素。数组元素可以通过索引进行访问,C#数组从0开始建立索引,即数组元素索引从0开始,最后一个数组元素的索引为数组长度减1。在C#中数组的元素
41、可以是简单数据类型,也可以是其他任何类型,包括数组类型。 创建一个C#数组需要下面3个步骤。 步骤1:声明数组 声明数组的语法格式有两种:两种定义方法没有什么差别。 数组元素类型 数组名 ; 数组元素类型 数组名; 方括号 是数组的标志,例如: int MyIntArray; string MyStrArray;,C#的数组,2020年8月28日,2.7 C#的格式与数据类型 枚举与数组,步骤2:创建数组空间 声明数组仅仅指定了数组的名字和数组元素的类型,还需要为它开辟内存空间。C#不支持变长的数组,所以在创建数组空间时必须指明数组的长度,以确定所开辟的内存空间的大小。创建数组空间的语法格式如
42、下: 数组名 = new 数组元素类型数组元素的个数; 上面的两个数组可以这样创建空间: MyIntArray = new int10; MyStrArray = new string15; 创建数组空间的工作也可以与声明数组合在一起,用一条语句完成。例如: int MyIntArray = new int10; string MyStrArray = new string15; 如果直接在数组声明时指定数组的长度,则编译时会出现错误。如: int100 MyIntArray; /是错误的,2020年8月28日,2.7 C#的格式与数据类型 枚举与数组,步骤3:创建数组元素并初始化 可以在数组
43、声明时直接对数组进行初始化。例如: int MyIntArray = new int 0,1,2,3,4,5,6; string MyStrArray = new string “Red”,“Green”,“Blue”; 也可以使用下面的简写方式: int MyIntArray = 0,1,2,3,4,5,6; string MyStrArray = “Red”,“Green”,“Blue”;,C#数组时需要注意的几个问题。 数组元素的索引从0开始。例如长度为10的数组,其元素下标为09。 所有的数组都有一个属性length,这个属性存储了数组元素的个数。 C#系统能自动检查数组索引是否越界的
44、情况。避免这种情况出现的一个有效方法是利用上面提到的length属性作为数组索引的上界。,2020年8月28日,2.7 C#的格式与数据类型 枚举与数组,数组使用的例子如例子程序 。 程序2.2:MyArray.cs using System; namespace mynamespace class Class2 public static string Colors = Red,Green,Blue,White,Yello; static void Main() for (int ii=0;ii Colors.Length ;ii+) Console.WriteLine(Colors ii)
45、; ,2020年8月28日,2.8 运算符与表达式,C#的运算符与C+语言基本类似。表 2.8列出了C#的所有运算符。,C#运算符,2020年8月28日,2.8 运算符与表达式,表达式是由变量、常量、对象、方法和运算符等按一定规则组成的式子。表达式的含义与数学上的表达式基本相同。 表达式的值就是对它运算后所得的结果。符合语法规则的表达式可以被编译系统理解、执行或计算。例如: 55 + 25 /其值等于80 15 + System.Math.Sqrt(16) /值等于19 System.Math.sqrt(x+y+z)*(x+y)2) 如果表达式包含多个运算符号,那么它们的计算顺序由运算符的优先
46、级(见表 2.10)决定,要改变表达式中的运算顺序可在表达式中使用圆括号。,C#表达式,2020年8月28日,2.9 方法定义与使用,在C#语言中,不存在全局方法,所有的方法都只能存在于类(或结构)中,并以类的成员方法(Method)的形式出现。 C#程序可以看成类的集合,只能通过类才能对变量和方法进行访问。 例如,计算表达式 1 + 2 + 3 + + n 的总和,在C和C+中,可以定义一个全局方法,如下: long Sum(int n) int s = 0 ; /定义一个累加器,初值为 0 for (int ii = 1; ii = n; ii+) s += ii ; return s ;
47、 然后在代码中调用该方法即可: long s = Sum(n) ;,2020年8月28日,2.9 方法定义与使用,在C#中不存在独立的方法,所有的方法都必须在类中声明和实现。因此,在C#中,上述方法可以改为以下形式: public class sumClass /声明一个类,并定义类的实体 public static sums ; /声明一个公共静态属性 public static long Sum(int n) /类的静态成员方法 int s = 0 ; /定义一个累加器,初值为 0 for (int ii = 1; ii = n; ii+) s += ii ; sums = s; 然后,通
48、过访问类的成员方法来调用该方法,例如: long s = sumClass.Sum(100) ;,2020年8月28日,2.9 方法定义与使用,由于C#是完全面向对象的,原有的C和C+中大量的系统方法都是以类的成员方法的形式出现的。 常用的数学方法以静态成员方法的方式封装在Math类中,该类处于System命名空间中。由于是静态的,所以调用时无须实例化Math类,可以通过Math.方法名()的形式调用该类中的方法,就像使用全局方法一样。 using System; namespace mynamespace class myclass static void Main() Console.Wr
49、iteLine(Math.E); Console.WriteLine(Math.PI); Console.WriteLine(Math.Sqrt(100); ,如果未导入命名空间,则应使用类的完整路径。例如: System.Math.E; System.Math.PI; System.Math.Sqrt(100); Math中的常用数学方法见表2.11。,2020年8月28日,2.10 定义方法,方法定义由4个部分组成 修饰符:public、static等,用来描述方法的特性,本书将在后面讨论。 方法返回值类型:void、int等。 方法名和参数列表:Print(string s)。 由花括弧
50、括起的要执行的代码块,即方法体。,程序2.3:PrintClass.cs using System; namespace mynamespace class PrintClass static void Print(string s) Console.WriteLine(s); static void Main() Print(Hello, come and join us!); ,1返回值 Print与Main两个方法都使用了void,表示方法不返回任何值。方法的返回类型就必须与返回值的类型一致。 2参数列表 方法名后的圆括弧中可以带任意个参数,其类型必须与传入数据的顺序、类型和个数一一对应
51、,否则会发生调用错误。,2020年8月28日,2.11 流程控制语句,流程控制语句是用来控制程序中各语句执行顺序的语句。流程控制是程序中非常关键和基本的部分,流程控制语句可以把单个的语句组合成有意义的、能完成一定功能的逻辑模块。 任何程序都可以且只能由三种基本流程结构构成,即顺序结构、分支结构和循环结构,这3种结构构成了程序局部模块的基本框架。 顺序结构是程序设计语言的最基本、最简单的一种结构,即语句按照书写的顺序依次执行。 分支结构又称为选择结构,它将根据计算所得的表达式的值来判断应选择执行哪一个流程的分支。 循环结构则是在一定条件下反复执行一段语句的流程结构,递归调用可以看做循环结构的一种
52、特殊形式。,2020年8月28日,2.11 流程控制语句,C#中的分支语句有两种形式:一种是负责实现双分支的if语句,另一种是负责实现多分支的开关语句switch。 if语句 if语句的一般形式是: if (条件表达式) /if分支 else /else分支,分支语句,如果条件表达式的取值为真(true),则执行if分支的语句块;如果条件表达式的取值为假(false),则执行else分支的语句块。 也可以没有else分支,此时若条件表达式的取值为假,则绕过if分支直接执行if语句块后面的其他语句。语法格式如下: if(条件表达式) / if分支 如果语句块内只有一个语句,此时,可不用大括号。,
53、下面是一个if语句的最简单例子,其功能是求 x的绝对值。 if (x = 0) x = -x ;,2020年8月28日,2.11 流程控制语句,程序程序 2.4 是找出三个数中的最大数 程序2.4:FindMax.cs using System; namespace mynamespace public class FindMax public static int Main() int a =15, b=20,c=5,max; if (a b) if (a c) max = a; else max = c; else if (b c) max = b; else max = c; Conso
54、le.WriteLine(3个数中最大值是: + max.ToString(); return max; ,2020年8月28日,2.11 流程控制语句,switch语句 switch 语句是多分支的开关语句,它的一般格式如下: switch (条件或变量表达式) case option1: break; case option2: break; default: break; ,需要注意的是,switch语句的每一个case判断,都只负责指明流程分支的入口点,而不负责指定分支的出口点,分支的出口点需要编程人员用相应的跳转语句来标明。 所以每个分支的语句块最后一个语句应该是流程跳转语句“bre
55、ak;”,它的作用是跳转出整个switch语句。,2020年8月28日,2.11 流程控制语句,int n; string sweek; switch (n) case 1: sweek =“星期一”; case 2: sweek =“星期二”; case 3: sweek =“星期三”; case 0: sweek =“星期日”; ,假设变量n的值为1,执行完switch语句后,变量sweek的值被赋成什么呢? 是“星期日”,而不是“星期一”。因为case判断只负责指明分支的入口点,表达式的值与第一个case分支的判断值相匹配后,程序的流程进入第一个分支,将sweek的值置为“星期一”。 由
56、于没有专门的分支出口,所以流程将继续沿着下面的分支逐个执行,sweek的值依次被置为“星期一”、“星期二”,最后变成“星期日”。如果希望程序的逻辑结构正常完成分支的选择,则需要为每一个分支另外编写退出语句break; 。,2020年8月28日,2.11 流程控制语句,为什么C#的switch的每个分支需要增加一个break呢?这是因为在某些情况下,switch语句的这个只有分支入口、没有出口的功能也有它独特的适用场合。如在若干判断值共享同一个分支时,就可以实现由不同的判断语句流入相同的分支。 下面的例子是根据学生的成绩判断是否及格与不及格: switch (stGrade) case A : case B : case C : stScore = “及格”; break ; default: stScore = “不及格”; ,2020年8月28日,2.11 流程控制语句,循环结构是在一定条件下,反复执行某段程序的流程结构,被反复执行的程序被称为循环体。 循环结构是程序中非常重
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 长春职业技术大学《金匮要略》2025-2026学年期末试卷
- 2026六年级数学下册 负数方法拓展
- 【 生物 】生命的延续和发展(第一、二章)复习课件-2025-2026学年人教版生物八年级下册
- 2024高考语文复习的重点
- 中风昏迷患者护理
- 安全生产四查制度讲解
- 美图M8 AI美颜技术
- 2023长春某中学高三数学(理)期末试题及答案
- 2023年军队文职人员招录考试《档案专业》考前模拟题及答案
- 智能化弱电机房工程防雷接地知识
- 2025内蒙古产权交易中心及所属子公司(第二批)招聘笔试历年常考点试题专练附带答案详解2套试卷
- 人流术致子宫穿孔课件
- 乒乓球协会财务制度
- 2026年公务员考试面试结构化模拟练习题含答案
- 2026年《必背60题》环境科学与工程26届考研复试高频面试题包含详细解答
- 钣金厂安全生产培训内容课件
- 安全绳使用方法课件
- 香囊非遗文化
- 2025-2030助产器械人性化设计趋势与基层医院配置缺口研究
- 株洲公务员面试面试题及答案
- 烟草新员工培训大纲
评论
0/150
提交评论