第2章程序设计基础.ppt

上传人:sccc 文档编号:5634491 上传时间:2023-08-04 格式:PPT 页数:88 大小:1.83MB
返回 下载 相关 举报
第2章程序设计基础.ppt_第1页
第1页 / 共88页
第2章程序设计基础.ppt_第2页
第2页 / 共88页
第2章程序设计基础.ppt_第3页
第3页 / 共88页
第2章程序设计基础.ppt_第4页
第4页 / 共88页
第2章程序设计基础.ppt_第5页
第5页 / 共88页
点击查看更多>>
资源描述

《第2章程序设计基础.ppt》由会员分享,可在线阅读,更多相关《第2章程序设计基础.ppt(88页珍藏版)》请在三一办公上搜索。

1、第2章 程序设计基础,2,2.1程序2.2常量和变量 2.3数据类型2.4撰写规范的程序代码,本章要点,3,2.1程序,在C#程序中通常使用大括号来构建代码段,例如经常看到的命名空间代码段、类代码段、过程代码段和函数代码段都是如此。而且由于大括号能够嵌套使用,所以编写代码时容易出现漏写的现象。为此,Visual Studio 2008中提供了自动识别支持,单击大括号“”、“”中的任何一个,便会标识出与之匹配的另一个大括号;如果不存在与之匹配的大括号,则会提示错误信息,4,2.1.1初识C#程序,5,2.1程序,2.1.1初识C#程序 通过这个程序我们可以简单总结出一个C#程序的基本框架结构:C

2、#程序由一个或多个独立的类组成,每个类归属于某个命名空间。C#的类可以由一个或多个方法组成,其中类中的静态main方法可用作程序运行的入口。,6,2.1.1初识C#程序,7,2.1程序,2.1.2标识符和关键字 标识符:在C#语言中,标识符是惟一地标识代码中的各种程序元素的名称,可用于表示变量、常量、方法、类或接口的名称。程序员可以任意指定标识符的名称,但建议起能够反映其用途的有意义的名称。要注意的是,在C#中,标识符是大小写敏感的。,8,2.1.2标识符和关键字,Unicode是16位字符格式,包含了几乎全世界范围内所有计算机语言的字符集。遵循Unicode标准是C#语言的一个重要特征,其他

3、语言一般使用最常用的美国标准信息交换码(ASCII)。ASCII的主要局限在于,它只有8位字符大小,不能容纳各种国际语言的多字节字符集。,9,2.1.2标识符和关键字,标识符几乎可以使用任何名称,但必须遵循以下语法规则:只能使用字母(大写的或小写的)和数字。标识符必须以字母或者下划线(“_”)开头。标识符以符号开始时,允许使用关键字来作为标识符。,10,2.1.2标识符和关键字,11,2.2常量和变量,1.常量定义:对于在程序运行期间其值保持不变的量,我们称之为常量。常量只能赋一次值,其值一旦设定,在程序中就不能改变。C#语言中使用关键字const来定义常量。习惯上,常量所使用的标识符全部用大

4、写,如PI等。而且,常量总是静态的,所以不必(实际上是不允许)在常量声明中包含修饰符static。优点:(1)常量使程序更方便修改(2)常量能够增加程序的可读性(3)常量能有助于避免程序出现错误 例:const int x=0;public const double y=6.67;private const string productName=Visual C#;,12,2.2常量和变量,2.变量 定义:变量是指其值在运行时可以改变的量。在方法内部定义的变量称为局域(local)变量(或局部变量),而在类部分定义的变量称为类成员变量,即字段。局部变量和类成员变量的作用范围不同,前者只限于方法

5、内部使用,后者的使用范围由访问修饰符限定。C#中,定义变量时必须指定一种数据类型。例:int x,y;/x,y是整数类型变量double w=3.1415;/w是实数类型变量bool value=true;/value是布尔类型变量,13,2.3数据类型,2.3.1简单类型2.3.2枚举类型 2.3.3结构类型2.3.4数组类型,14,2.3数据类型,C#提供了15种预定义类型,其中包括13种简单类型和2种非简单类型。,15,2.3数据类型,所有预定义类型的名称都由全小写的字母组成。预定义的简单类型包括:11种数值类型一种Unicode字符类型char一种布尔类型bool两种非简单类型:str

6、ing,是一个Unicode字符数组object,是所有其他类型的基类,16,预定义类型的补充,所有预定义类型都直接映射到底层的.NET类型。C#的预定义类型名称就是.NET类型的别名,所有使用.NET的类型名称也能很好地符合C#语法,不过不鼓励这样做。在C#程序中,应该尽量使用C#的预定义类型名称而不是.NET类型名称。,17,用户定义类型,除了C#提供的15种预定义类型,还可以创建自己的用户定义类型。有6种类型可以由用户自己创建:类类型结构类型数组类型枚举类型委托类型接口类型,18,2.3数据类型,C#是强类型语言,所有的变量都必须有确切的类型,对变量赋值时必须保证所赋的值与该变量的类型匹

7、配。C#支持两种数据类型:值类型和引用类型。值类型包括简单类型(如int,float)、枚举类型和结构类型。引用类型包括类类型、接口类型、代理(delegate)类型和数组类型。,19,2.3数据类型,值类型和引用类型的区别在于:值类型变量存储在栈(stack)中,且占用空间大小相对固定,变量直接包含它们的数据,可以直接访问其值引用类型数据需要通过存储在栈中的引用(reference)来间接访问其值,实际内容存储在内存中的堆(heap)中,占用空间大小随意。,20,补充:栈和堆,运行中的程序使用两个内存区域来存储数据:栈和堆。栈是一个内存数组,是一个LIFO(last-in first-out

8、)的数据结构。,21,补充:栈和堆,堆是一块内存区域,在堆里可以分配大块的内存用于存储某类型的数据。与栈不同,堆里的内存可以任意顺序存入和移除。,22,补充:栈和堆,23,补充:值类型和引用类型,值类型数据 引用类型数据-数据存放在栈里-数据存放在堆里-引用存放在栈里,24,2.3数据类型,25,2.3.1简单类型,C#提供了几种与定义的简单类型,包括:1.整数型2.字符类型3.实数类型(1)浮点类型(2)十进制数类型4.布尔类型,26,2.3.1简单类型,简单类型通过关键字来确定,实际上这些关键字是System命名空间中预定义结构类型的别名,其对应关系如下表所示:,27,2.3.1简单类型,

9、28,整数类型,整数类型表示无小数部分的数字。整数类型又进一步分为8个类型:字节型(byte)短字节型(sbyte)短整形(short)无符号短整形(ushort)整形(int)无符号整形(uint)长整形(long)无符号长整形(ulong),29,整数类型,30,字符类型,字符包括数字类型、英文字母、表达符号等。在C#中,字符类型按照国际公认的标准,采用Unicode字符集。Unicode字符采用十六进制编码,范围是065535,用它可以表示世界上大多数语言。char的长度为16位,字符变量用单引号表示,例如:char yes=Y;,31,字符类型,char类型用来表示Unicode编码的

10、字符。Unicode字符集的前256个字符与ANSI字符集相同。对于英语以外的文字和某些特殊字符,可以用前缀u加上Unicode字符编码来表示,例如:u0009/制表符(Tab键)u000a/换行符u0022/双引号u0027/单引号,32,实数类型,数学中不仅包括整数,而且还包括小数,小数在C#中采用浮点数来表示。C#中的浮点类型有两种:float和double,分别为32位和64位。C#中新定义的decimal具有更高的精度,更能满足苛刻的金融、财务运算的要求。,33,布尔类型,布尔类型表示布尔逻辑量,包含“真”和“假”两个概念。布尔类型的值为true和false,主要用于逻辑判断。在布尔

11、类型与其他类型间不存在标准的转换。特别是,布尔类型与整数类型截然不同,布尔数据不能用于整数类型的地方,反之亦然。,34,2.3.2枚举类型,枚举类型(enum type)是一个有命名的、常数(整数)的独特类型。每个枚举元素可以采用文字的方式表示,以便于理解其含义。枚举声明:声明一个新的枚举类型。枚举声明开始于一个关键词enum,后面跟着类型名称,然后确定枚举的基本类型,最后使用花括号来包含它的成员。,35,2.3.2枚举类型,例:enum Days Sat,Sun,Mon,Tue,Wed,Thu,Fri;每个枚举类型都有一个底层整数类型,默认为int:每个枚举成员都被赋值一个底层类型的常量值编

12、译器把第一个成员赋值为0,并对每一个后续成员赋的值比前一个成员多1例子:EnumTest.sln(EnumTest001),36,2.3.2枚举类型,可以把枚举值赋给枚举类型变量。例子:EnumTest.sln(EnumTest002),37,设置底层类型和显式值,可以通过把冒号和类型名称放在枚举名之后,以使用int以外的整数类型。此类型可以是除了char以外的任何整数类型。所以成员常量都属于枚举的底层类型。enum Days:byte Sat=1,Sun,Mon,Tue,Wed,Thu,Fri;,38,设置底层类型和显式值,枚举成员常量的值可以是底层类型的任何值。要显式地设置一个成员的值,在

13、枚举声明中的变量名之后使用初始化表达式。尽管不能有重复的名称,但可以重复的值。enum DaysSat=1,Sun=2,Mon=2,Tue,Wed,Thu,Fri;,39,隐式成员编号,可以显式地赋值给任何枚举成员常量。如果不初始化一个成员常量,编译器隐式地给它赋一个值。enum Days Sat=11,/11Sun,/12Mon,/13Tue=4,/4Wed,/5Thu,/6Fri/7;,40,2.3.3结构类型,结构:几个数据组合在一起而形成的数据结构。结构类型:它能把一系列相关的变量组织成为一个单一的实体。结构的定义:struct,41,2.3.3结构类型,结构是自定义的数据类型,非常类

14、似于类。它们有数据成员和函数成员。虽然与类相似,但是有许多重要地区别,最重要的区别是:类是引用类型而结构是值类型结构是隐式密封的,这意味着它们不能被派生例子:Struct_Point.sln,42,结构是值类型,和所有值类型一样,结构类型变量含有自己的数据,从而:结构类型的变量不能为null两个结构类型不能引用同一对象,43,构造函数和析构函数,结构可以有实例构造函数和静态构造函数,但不允许有析构函数。实例构造函数语言隐式地为每个结构提供一个无参数的构造函数。这个构造函数把结构的每个成员设置为该类型的默认值。值成员被设置成它们的默认值,引用成员被设置成null。预定义的无参数构造函数对每个结构

15、都存在,而且不能删除或定义它。但是,可以创建另外的构造函数,只要它们有参数。要调用一个构造函数,包括隐式无参数构造函数,要使用new操作符。注意,即使不从堆中分配内存也使用new操作符。例子:StructExample.sln,44,构造函数和析构函数,静态构造函数结构的静态构造函数创建并初始化静态数据成员,而且不能引用实例成员。,45,字段初始化是不允许的,struct CoOrds public int x=10;/error public int y=10;/error,46,结构是密封的,结构总是隐式密封的,因此,不能从它们派生其他结构。由于结构不支持继承,个别类成员修饰符用在结构成员

16、上将没有意义。因而,它们不能被用结构或声明中。不能用于结构的修饰符如下:protecedinternalabstractvirtual结构本身派生自System.ValueType,System.ValueType 派生自object。,47,结构作为返回类型和参数,结构可以用作返回值和参数:返回值:当结构被作为返回值时,一个拷贝被创建并从函数成员返回值参:当结构被用作值参时,一个实际参数的拷贝被创建。该拷贝被用在方法的执行中ref和out参数:如果把一个结构用作ref或out参数一个对结构的引用被传入方法,这样其数据成员就能被改变。,48,关于结构的附加信息,分配结构比创建类的实例需要更少的

17、消耗,所以使用结构代替类有时可以提高性能。关于结构,需要知道的最后一些事项如下:预定义简单类型(int,short,long等等),尽管在.NET和C#中被视为原始类型,它们实际上在.NET中都被实现为结构,49,2.3.4数组类型,数组:是C#内置的集合类,这种数据结构中包含具有相同类型的变量元素。每个元素通过变量名称和一个或多个方括号中的索引名称来访问,如下所示:MyArray4;,50,2.3.4数组类型,定义:元素:数组的独立数据项被称作元素。数组的所有元素必须是相同类型的,或继承自相同的类型秩/维度:数组可以有任何为正数的维度数。数组的维度数称作秩(rank)。维度长度:数组的每一个

18、维度有一个长度,就是这个方向的位置个数数组长度:数组的所有维度中的元素的总和称为数组的长度,51,2.3.4数组类型,下面有有关C#数组的一些要点:数组一旦被创建,大小就固定了。C#数组不支持动态数组数组索引号是从0开始的。如果维度长度是n,索引号范围是从0到n-1,52,数组的类型,C#提供了两种类型的数组:一维数组:可以认为是单行元素或元素向量多维数组:是由主向量中的位置组成的,每一个位置本身又是一个数组,称为子数组(sub-array)。子数组向量中的位置本身又是一个子数组矩形数组:某个维度的所有子数组有相同长度的多维数组不管有多少维度,总是使用一组方括号int x=myArray4,6

19、,1交错数组:每一个子数组都是独立数组的多维度数组可以有不同长度的子数组为数组的每一个维度使用一对方括号,53,数组的类型,54,数组是对象,数组实例是从System.Array继承的对象,它们也继承了很多有用的方法,如下所示:Rank:返回数组维度数的属性Length:返回数组长度(数组中所有元素的个数)的属性,55,数组是对象,数组是引用类型,与所有引用类型一样,有数据的引用以及数据对象本身。引用在栈或堆上,并且数据对象本身总是在堆上。,56,数组是对象,尽管数组是引用类型,但是数组的元素可以是值类型或引用类型:如果存储的元素都是值类型,数组被称作值类型数组如果存储在数组中的元素都是引用类

20、型对象,数组被称作引用类型数组,57,一维数组和矩形数组,声明一维数组或矩形数组要声明一维数组或矩形数组,可以在类型和变量名称之间使用一对方括号。方括号内的逗号就是维度说明符,它们指定了数组的维度数。维度就是逗号数量加1。比如,没有逗号代表一维数组,一个逗号代表二维数组,依此类推。long myArray;,58,一维数组和矩形数组,如下代码展示了矩形数组声明的示例:int,firstArray;/三维整形数组int,arr1;/二维整形数组long,arr2;/三维long数组long3,2,6 secondArray;/编译错误注意:可以使用任意多的维度说明符(逗号)不能在数组类型区中放数

21、组维度长度。维度是数组类型的一部分,而维度长度不是类型的一部分数组声明后,维度数就固定了。然而,维度长度直到数组实例化时才会被确定,59,实例化一维数组或矩形数组,要实例化数组,可以使用数组创建表达式。数组创建表达式由new运算符组成,后面是基类名称和一对方括号。方括号以逗号分隔每一个维度的长度。,60,实例化一维数组或矩形数组,下面是一维数组声明的示例:int arr2=new int4;MyClass mcArr=new MyClass4;int,arr3=new int3,6,2;,61,访问数组元素,在数组中使用整形值作为索引来访问数组元素:每一个维度的索引从0开始方括号内的索引在数组

22、名称之后int intArr1=new int15;/声明一维数组intArr12=10;/向第3个元素写入值int var1=intArr12/从第3个元素读取值int,intArr2=new int5,10;/声明二维数组intArr22,3=7;/向数组写入值int var2=intArr22,3;/从数组读取值,62,初始化数组,当数组被创建之后,每一个元素都被自动初始化为此数组类型的默认值。对于预定义的类型,整形默认值是0,浮点型的默认值为0.0,布尔型的默认值为false,而引用类型的默认值则是null。int intArr=new int4;,63,显式初始化一维数组,对于一维数

23、组,可以通过在数组实例化的数组创建表达式之后,包括初始化列表来设置显式初始值。初始值必须以逗号分隔,并封闭在一组花括号内维度长度是可选的,因为编译器可以通过初始化值的个数来推断长度注意,在数组创建表达式和初始化列表中间没有分隔符,64,显式初始化一维数组,int intArr=new int 10,20,30,40;,65,显式初始化矩形数组,要显式初始化矩形数组:每一个初始值向量必须封闭在花括号内除了初始值,每一个维度的初始化列表和组成部分必须使用逗号分隔int,intArr2=new int,10,1,2,10,11,9;,66,快捷语法,int arr1=new int310,20,30

24、;int arr1=10,20,30;两种法等价int,arr=new int,0,1,2,3,4,5;int,arr=0,1,2,3,4,5;两种法等价,67,隐式类型数组,直到现在,我们一直都在数组声明的开始处显式指定数组类型。然而,在C#3.0中,和其他局部变量一样,数组可以是隐式类型的:当初始化数组时,可以让编译器根据初始化器的类型来推断数组类型。只在所有初始化器能隐式转换为单个类型,就可以这么做和隐式类型的局部变量一样,使用var关键字来替代数组类型,68,隐式类型数组,int intArr1=new int10,20,30,40;var intArr2=new 10,20,30,4

25、0;int,intArr3=new int,10,1,2,10;var intArr4=new,10,1,2,10;例子:ArrayTest.sln,69,foreach语句,foreach语句允许连续访问数组中的每一个元素。重点如下所示:迭代变量是临时的,只读的,并且和数组中元素的类型相同。foreach语句使用迭代变量来连续表示数组中的每一个元素。,70,foreach语句,foreach语句的语法如下:Type是数组中元素的类型。可以显式地提供它的类型。从C#3.0开始,也可以隐式提供它的类型并通过编译器来推断,因为编译器知道数据的类型标识符(Identifier)是迭代变量的名字数组名

26、称(ArrayName)是要处理的数组的名字语句是要为数组中的每一个元素执行一次的单条语句或语句块,71,foreach语句,foreach语句以以下方式工作:从数组的第一个元素开始并把它赋值给迭代变量然后执行语句主体。在主体中,可以把迭代变量作为数组元素的的只读别名在主体执行完之后,foreach语句选择数组中的下一个元素并重复处理,72,数组继承的有用成员,C#数组从System.Array类继承,下面列出了一些有用的属性和方法。例子:Array_AttributeMethod_Sample.sln,73,Clone方法,Clone方法为数组进行浅复制。也就是说,它只创建了数组本身的克隆。

27、如果是引用类型数组,它不会复制元素引用的对象。对于值类型数组和引用类型数组而言,有不同的结果。克隆值类型数组会产生两个独立数组克隆引用类型数组会产生指向相同对象的两个数组,74,Clone方法,Clone方法返回object类型的引用,它必须被强制转换成数组类型。int intArr1=1,2,3;int intArr2=(int)intArr1.Clone();,75,Clone值类型,int intArr1=1,2,3;/步骤1int intArr2=(int)intArr1.Clone();/步骤2intArr20=100;/步骤3intArr21=200;intArr22=300;,7

28、6,Clone引用类型,A AArray1=new A3 new A(),new A(),new A();/步骤1A AArray2=(A()AArray1.Clone();/步骤2AArray20.Value=100;/步骤3AArray20.Value=200;AArray20.Value=300;,77,2.4撰写规范的程序代码,程序代码质量评审原则:正确性 指程序代码要实现软件设计所要求的功能;可靠性 指程序代码最后编译的程序要能够稳定、可靠、安全的运行;规范化 指程序代码书写的风格、命名规则等要符合规范;可读性 指程序代码要便于查看和理解;灵活性 指程序代码的设计和编写应该易于维护和

29、改动。,78,2.4撰写规范的程序代码,2.4.1基本格式 2.4.2注释2.4.3命名,79,2.4.1基本格式,通过适当分行可以体现代码的结构。当一个表达式不适合写在一行中时,按照下面的通用规则将之分开:逗号后面分开;操作符后分开;优先在更高层次处分割;将表达式的起始位置与上一行中相同级别的表达式对齐。,80,2.4.1基本格式,撰写C#类时应该遵循以下的顺序结构:/程序说明using 类库的名称namespace 名称空间类修饰符 class 类的名称类成员:域(按照以下访问特性次序排列)publicprotectedprivate protectedprivate,81,2.4.1基本

30、格式,静态变量()(即使用 static修饰符的。按照以下访问特性次序排列)public protectedprivate protectedprivate 常量(即使用const修饰符的)构造方法类成员:方法(按照以下访问特性次序排列)public protectedprivate protectedprivate,82,2.4.2注释,单行注释段落注释XML文档化注释文档标识符格式标识符,83,2.4.3命名,命名时要采用英文单词,而不要使用中文拼音 可以采用几个英文单词的组合来命名。名称可以是“动词+对象”组合而成的,也可以是“对象+动词”组合而成的。要考虑到与C#开发工具集成开发环境统一。在对菜单命令的标识号命名的时候,应将所属菜单项的名称包含进去。对于表示集合意义的名称,可以使用名词的复数形式。,84,2.4.3命名,1.命名样式:Pascal样式:每个单词的首字母大写。Camel样式:除了第一个单词外,其他单词首字母大写。Upper样式:这种样式只用在标识有固定意义的缩写形式,85,2.4.3命名,2.命名指南 对于各种不同命名对象,其命名规则建议参照下表:,86,2.4.3命名,87,2.4.3命名,Thank You!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号