版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
WinForm程序设计与实践第2章C#语言基础学习目标:了解C#关键字,掌握标识符的命名规则区别值类型和引用类型,掌握常用的数据类型,理解数据类型转换掌握常量、变量的声明和应用掌握运算符的使用理解分支的概念,掌握if语句和switch语句的使用方法理解循环的概念,掌握循环语句的使用方法掌握跳转语句的使用方法掌握异常处理的方法2.1C#语法元素C#的基本语法包括数据类型、常量和变量、运算符和表达式、流程控制语句以及异常处理等内容。下面分析一下这些语法元素的关系以及它们是如何体现在程序中的。一个程序应该包含以下两方面的内容:(1)对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构。(2)对操作的描述。即操作步骤,也就是算法。2.2关键字与标识符关键字是对C#编译器具有特殊意义的预定义保留标识符。标识符是用来为程序中各元素进行定义的名字。2.2.1关键字C#中的关键字如表2-1所示,每个关键字都有特殊的作用,例如using关键字用于引入命名空间,class关键字用于声明一个类。注意:(1)所有的关键字都是小写的;(2)程序中的标识符不能以关键字命名,除非前面加上“@”前缀。abstractconstexternintoutshorttypeofascontinuefalseinterfaceoverridesizeofuintbasedecimalfinallyinternalparamsstackalloculongbooldefaultfixedisprivatestaticuncheckedbreakdelegatefloatlockprotectedstringunsafebytedoforlongpublicstructushortcasedoubleforeachnamespacereadonlyswitchusingcatchelsegotonewrefthisvirtualcharenumifnullreturnthrowvolatilecheckedeventimplicitobjectsbytetruevoidclassexplicitinoperatorsealedtrywhile2.2.2标识符标识符是编程人员为常量、变量、方法、类等定义的名字。标识符最多可以由511个字符组成,这些字符可以是任意顺序的大小写字母、数字、下划线“_”和“@”符号,但不能以数字开头,且不能与关键字同名。为了增加代码的可读性,建议编程人员在定义标识符时应该遵循以下规范。(1)使用Pascal命名法定义类名、方法名和属性名,即每个单词的首字母要大写。例如Age,UserName,ArrayList。(2)使用Camel命名法定义字段名和变量名,即首字母小写,之后的每个单词的首字母均为大写,字段名前加下划线“_”。例如变量arrayList,字段_userName。(3)常量名中的所有字母都大写,且单词之间使用下划线连接。例如USER_AGE。(4)在定义标识符时,使用代表某种意义的英文单词,增加可读性。例如使用userName表示用户名,使用password表示密码。2.3数据类型数据类型是表示具有多种相同特征的一组数据。从数据存储的角度,数据类型又分为值类型和引用类型。值类型用于存储数据的值,而引用类型用于存储对实际数据的引用地址。类型说明值类型简单值类型有符号整型:sbyte,short,int,long无符号整型:byte,ushort,uint,ulong浮点型:float,double高精度小数:decimal布尔型:boolUnicode字符:char结构structS{…}形式的用户自定义类型枚举enumE{…}形式的用户自定义类型引用类型Object所有其他类型的最终基类型:object类类型classC{…}形式的用户自定义类型接口interfaceI{…}形式的用户自定义类型字符串Unicode字符串:string数组一维和多维数组委托delegateTD{…}形式的用户自定义类型2.3.1简单值类型C#语言提供了一组已经定义的简单值类型,它们都是具有唯一取值的数据类型,从计算机表示的角度可分为数值类型、布尔类型和字符类型。1.数值型根据不同的范围、精度和用途,C#语言将数值类型分为整数型、浮点型和小数型类型名称别名取值范围空间说明
整数型sbyteSystem.Sbyte-128~1271B有符号8位整数byteSystem.Byte0~2551B无符号8位整数shortSystem.Int16-32768~327672B有符号16位整数ushortSystem.UInt160~655352B无符号16位整数intSystem.Int32-2147483648~21474836474B有符号32位整数uintSystem.UInt320~429949672954B无符号32位整数longSystem.Int64-9223372036854775808~92233720368547758078B有符号64位整数ulongSystem.UInt640~184467440737095516158B无符号64位整数浮点型floatSystem.Single±1.5×10-45~±3.4×10384B32位单精度实数doubleSystem.Double±5.0×10-324~±1.7×103088B64位双精度实数小数型decimalSystem.Decimal±1.0×10-28~±7.9×102816B128位十进制实数2.布尔型布尔型(bool)只有true(真)和false(假)两个值,不能用数据类型中的1或0来代替,在计算机中占4个字节,主要应用到数据运算的流程控制中,辅助实现逻辑分析和推理。例如:booli=true;3.字符型字符型(char)即保存单个字符的值,每个字符对象与Unicode字符集中的字符相对应。char类型的变量值需要使用单引号括起来。例如:charc1=‘A’;转义字符含义转义字符含义\’单引号\r回车,将当前位置移动到本行开头\’’双引号\b退格,将当前位置移到前一列\\反斜杠\f换页,将当前位置移动到下一页开头\0空字符\n换行,将当前位置移动到下一行开头\a感叹号\x后面跟两个十六进制数字,表示一个ASCII字符\t水平制表符\u后面跟四个十六进制数字,表示一个Unicode字符2.3.2结构类型上述几种简单值类型可以完成基本的数据运算。只有这些基本数据类型是不够的,有时要将不同类型的数据组合成一个整体,例如一个学生的学号、姓名和成绩等,C#提供了结构类型来解决这个问题。结构类型(struct)通常用来封装小型相关变量组,如学生的成绩、商品的类型等。在C#中,作为一个整体的学生(例如名称为Student),称为结构型,而学生的姓名、学号、成绩等数据项称为结构型的成员。结构类型是使用关键字struct定义的,声明结构类型的语法格式如下:[访问修饰符]struct结构名称{结构体;}2.3.3枚举类型枚举类型(enum)是一种由一组被称为枚举数列表的常数所组成的独特类型。每种枚举类型都有对应的数据类型,可以是除char以外的任何简单数据类型。枚举类型是使用关键字enum定义的,声明枚举类型的语法格式如下:[访问修饰符]enum枚举类型名称{枚举列表};2.3.4object类型object类型是C#语言中所有数据类型的根类,即所有类型都是直接或间接从object继承的。2.3.5类类型类是能存储数据并执行操作的复杂数据类型,用来定义对象的可执行操作(如属性和方法等),类的实例是对象。类类型是使用关键字class定义的,声明类类型的语法格式如下:[访问修饰符]class类名称{类成员;}2.3.6接口
接口是指描述可属于任何类或结构的一组相关功能。接口可由属性、方法、事件、索引器任意组合构成,但接口不能包含字段。接口不能单独存在,不能实例化,只能在实现接口的类中实现。接口是使用关键字interface定义的,声明接口的语法格式如下:[访问修饰符]interface接口名称{接口成员;}2.3.7字符串C#字符串是一个由若干个Unicode编码组成的字符数组。字符串由关键字string声明,字符序列使用一对双引号引起来,例如“.NET程序设计”、“HelloWorld”等都是字符串。例如:stringa="string1";
以上代码表示声明了一个字符串变量a。
两个字符串可能通过加号运算符来连接。
例如:stringa="string1";stringb="a="+a;以上代码中,字符串b的值为“a=string1”,就是将两个字符串“a=”和“string1”连接起来了。C#的字符串可以看成一个字符数组,允许通过索引来提取字符串中的字符。例如:stringa="string1";charx=a[0];以上代码执行后,字符型变量x的值为’s’。C#允许使用关系运算符==、!=来比较两个字符串所对应的字符是否相同。例如:stringa="string1";stringb="string2";则a==b的运算结果为false。2.3.8数组数组是由若干个数据类型相同的数组元素构成的数据结构,索引从0开始,每个元素可以通过数组名称和索引进行访问。数组元素可以是任何类型,但因为没有名称,只能通过索引(又称下标)来访问。数组有一个“秩”,它表示和每个数组元素关联的索引的个数。数组的秩又称为数组的维度。“秩”为1的数组称为一维数组,“秩”大于1的数组称为多维数组,根据维度,多维数组分为二维数组、三维数组等。数组类型声明语法一维数组数据类型[]数组名二维数组数据类型[,]数组名三维数组数据类型[,,]数组名1.一维数组(1)一维数组的声明与创建声明和创建一维数组的一般形式如下:数组类型[]数组名=new数组类型[数组长度];例如:int[]arr1=newint[5];表示声明和创建一个具有5个元素的一维数组arr1。一维数组也可以先声明后创建。(2)一维数组的初始化如果在声明和创建数组时,没有初始化数组,则数组元素将自动初始化为该数组类型的默认初始值。初始化数组有以下三种方式。①创建时初始化在创建一维数组时,对其初始化的一般形式如下:
数组类型[]数组名=new数组类型[数组长度]{初始值列表};②先声明后初始化C#允许先声明一维数组,然后再初始化各数组元素。其一般形式如下:数组类型[]数组名;数组名=new数组类型[数组长度]{初始值列表};③先创建后初始化C#也允许先声明和创建一维数组,然后逐个初始化数组元素。其一般形式如下:数组类型[]数组名=new数组类型[数组长度];数组元素=值;2.多维数组(1)多维数组的声明和创建声明和创建多维数组的一般形式如下:数组类型[逗号列表]数组名=new数组类型[数组长度];其中,逗号列表的逗号个数加1就是维度数,即如果逗号列表为一个逗号,则称为二维数组;如果为两个逗号,则称为三维数组,依此类推。维度长度列表中的每个数字定义维度的长度,数字之间以逗号做间隔。(2)多维数组的初始化多维数组也具有多种初始化方式,但需要注意以下几点:①以维度为单位组织初始化值,同一维度的初始值放在一对大括号中{}中。②可以省略维度长度列表,系统能够自动计算维度和维度的长度,但逗号不能省略。③多维数组不允许部分初始化。2.4.2变量
在程序运行期间,随时可能产生一些临时数据,这些数据被保存在一些内存单元中,每个内存单元都用一个标识符来标识。这些内存单元就是变量,定义的标识符是变量名,内存单元中存储的数据是变量的值。一般情况下,声明在类中的称为成员变量,声明在方法中的称为局部变量。变量必须先声明后使用,声明变量就是给变量指定一个类型和一个名称,声明变量后,编译器会给该变量分配一定大小的内存单元。变量可以在声明时赋值,也可以在运行时赋值。声明变量的语法格式如下:[访问修饰符]数据类型变量名[=表达式];例如:intx=1,y;y=x+15;2.新建项目在新建的解决方案上,右击鼠标选择“添加”→“新建项目”。在“添加新项目”对话框中选择“控制台应用程序”选项,自定义修改名称并选择保存位置(这里命名为“HelloWorld”),点击“确定”按钮,创建一个控制台项目,如图1-11所示。2.4.3变量的作用域变量的作用域是指变量的使用范围。在程序中,变量一定会被定义在某一对大括号中,该大括号所包含的代码区域就是这个变量的作用域。例如:在下面代码段中,变量x的作用域是从第2行到第10行,变量y的作用域是从第5行到第8行,变量i是在循环语句中声明的变量,只存在于该循环体内,即第5行到第8行1static
voidMain(string[]args)2{3intx=4;4for(inti=0;i<5;i++)5{6inty=3;7...8}9...10}。2.5运算符
运算符是一种专门用来处理数据运算的特殊符号,数据变量结合运算符形成完整的程序运算语句。运算符用于执行程序代码运算,会针对一个以上操作数来进行运算。运算符大致可以分为4种类型:算术运算符、赋值运算符、比较运算符和逻辑运算符。2.5.1算术运算符名称符号说明加法运算符+双目运算符,即应有两个量参与加法运算。如a+b,4+8等。具有右结合性。减法运算符-双目运算符。但“-”也可作负值运算符,此时为单目运算,如-x,-5等具有左结合性。乘法运算符*双目运算符,具有左结合性。除法运算符/双目运算符,具有左结合性。参与运算量均为整型时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为双精度实型。求余运算符(模运算符)%双目运算符,具有左结合性。要求参与运算的量均为整型,不能应用于float或double类型。求余运算的结果等于两数相除后的余数,整除时结果为0。2.5.2赋值运算符
赋值运算符为变量、属性、事件等元素赋新值。赋值运算符主要有=、+=、-=、/=、*=、%=、&=、|=、<<=、>>=和^=运算符。赋值运算符的左操作数必须是变量、属性访问、索引器访问或事件访问类型的表达式,如果赋值运算符两边的操作数的类型不一致,就需要首先进行类型转换,然后再赋值。名称运算符运算规则意义赋值=将表达式赋值给变量将右边的值给左边加赋值+=x+=yx=x+y减赋值-=x-=yx=x-y除赋值/=x/=yx=x/y乘赋值*=x*=yx=x*y模赋值%=x%=yx=x%y位与赋值&=x&=yx=x&y位或赋值|=x|=yx=x|y右移赋值>>=x>>=yx=x>>y左移赋值<<=x<<=yx=x<<y异或赋值^=x^=yx=x^y2.5.3比较运算符比较运算符可以完成两个操作数的比较运算之后返回一个代表运算结果的布尔值。比较运算符说明比较运算符说明==等于!=不等于>
大于>=大于等于<
小于<=小于等于2.5.4逻辑运算符逻辑运算符对两个表达式执行布尔逻辑运算。C#中的逻辑运算符大体可以分为按位逻辑运算符和布尔逻辑运算符。按位逻辑运算符是对两个整数表达式的相应位执行布尔逻辑运算。有效的整型数是有符号或无符号的int和long类型,它们对每一位执行布尔计算并返回兼容的整数结果。(1)按位“与”运算符按位“与”运算符(&)比较两个整数表达式的相应位。当两个整数的对应位都是1时,返回相应的结果位是1;当两个整数的相应位都是0或者其中一个位是0时,则返回相应的结果位是0。(2)按位“或”运算符
按位“或”运算符(|)用于比较两个整数的相应位。当两个整数的对应位有一个是1或都是1时,返回相应的结果位是1;当两个整数的相应位都是0时,则返回相应的结果位是0。(3)按位“异或”运算符
按位“或”运算符(^)用于比较两个整数的相应位。当两个整数的对应位有一个是1而另一个是0时,返回相应的结果位是1;当两个整数的相应位都是1或都是0时,则返回相应的结果位是0。(4)布尔“与”运算符
布尔逻辑运算符对两个布尔表达式执行布尔逻辑计算。先计算左边的表达式,然后计算右边的表达式。最后,通过两个表达式之间的布尔逻辑运算符对两个表达式进行计算。根据使用的运算符的类型返回布尔结果。(5)布尔“或”运算符
布尔“或”运算符(|)用于计算两个表达式的结果。当两个布尔表达式中有一个表达式返回真时,则结果为真;当两个布尔表达式的计算结果都是假时,则结果为假。(6)布尔“异或”运算符
布尔“异或”运算符(^)用于计算两个布尔表达式的结果,只有当其中一个表达式是真而另外一个表达式是假时,该表达式返回的结果才是真;当两个表达式的计算结果都是真或者都是假时,则返回的结果为假。2.5.5运算符优先级表达式中运算符的计算顺序由运算符的优先级和结合性决定。当表达式包含多个运算符时,运算符的优先级控制各运算符的计算顺序,即高优先级的先计算,低优先级的后计算。运算符结合性优先级次序()从左至右
高
低++、--、!从右至左*、/、%从左至右+、-从左至右<、<=、>、>=从左至右==、!=从左至右&&从左至右||从左至右=、+=、*=、/=、%=、-=从右至左2.6流程控制语句一个应用程序由许多条语句构成,通常情况下,程序会按先后顺序执行每条语句,如果需要改变程序中语句的执行顺序或重复执行某段程序,就需要使用流程控制语句。常见的流程控制语句包括选择结构语句、循环结构语句和跳转语句。2.6.1选择结构语句选择结构语句也称为条件语句,此类语句根据条件是否成立而控制执行不同的程序段,从而实现程序的分支结构。选择结构语句分为if条件语句和switch条件语句。1.if条件语句if条件语句分为3种语法格式,分别为if语句、if…else语句和if…elseif…else语句,每一种格式都有其自身的特点,适用于解决不同的选择结构问题。(1)if语句if语句是指如果满足某种条件,就执行某种处理。if语句的语法格式如下:if(判断条件){执行语句;}1.if条件语句(2)if…else语句if…else语句是指如果满足某种条件,就执行某种处理,否则就执行另一种处理。if…else语句的语法格式如下:if(判断条件){执行语句1;}else{执行语句2;}1.if条件语句(3)if…elseif…else语句if(判断条件1){执行语句1;}elseif(判断条件2){
执行语句2;}…{
执行语句n+1;}2.switch条件语句switch(条件表达式){case目标值1:执行语句1;break;case目标值2;执行语句2;break;···[default:执行语句n]}2.6.2循环结构语句1.for语句for语句的语法格式如下:for(初始表达式;循环条件表达式;循环控制表达式){
循环体语句;}2.6.2循环结构语句2.while语句while语句的语法格式如下:while(循环条件){
循环体语句;}3.do-while语句do-while语句的语法格式如下:do{循环体语句;}while(循环条件);2.6.2循环结构语句4.foreach语句foreach语句用于循环访问集合中的元素,但不能更改集合中的元素,循环变量是一个只读变量,且只能用于foreach循环体内。foreach语句的语法格式如下:foreach(类型循环变量in集合){
循环体语句;}2.6.2循环结构语句1.break语句break语句可直接跳出当前的整个循环,可用在循环和switch中。2.continue语句continue语句只能用在循环中,continue语句不是终止并跳出当前循环,而是终止执行continue语句后面的语句,直接回到当前循环的起始处,开始下一次循环。3.return语句return语句用于终止方法的执行,并将返回值返回给调用方法。4.goto语句goto语句可将程序直接跳转到标记语句。goto语句只能在一个方法体中进行语句跳转,且同一个方法体中标记名是唯一的。2.6.3跳转语句在程序中,当把一种数据类型的值赋给另一种数据类型的变量时,需要进行数据类型转换。根据转换方式的不同,数据类型转换可以分为自动转换和强制转换,同时,某些值类型之间也可以采用Convert类提供的静态方法进行转换。1.自动转换自动转换又称为隐式转换,指的是两种数据类型在转换的过程中不需要显式地进行声明。自动转换一般在不同类型的数据进行混合运算时发生,当编译器能判断出转换的类型,而且转换不会带来精度的损失时,C#语言编译器会自动进行转换。自动转换一般是安全的,不会造成数据溢出或丢失等问题。2.7数据类型转换2.强制转换强制转换又称为显式转换,指的是两种数据类型之间的转换需要显式地进行声明。当两种类型彼此不兼容,或者目标类型取值范围小于源类型时,就需要进行强制转换。强制转换的语法格式如下:源类型
变量=(目标类型)值3.Convert类的方法Convert类可以将一个基本数据类型转换成另一个基本数据类型。2.7数据类型转换程序在运行时可能会发生非正常情况,如磁盘空间不足,用户输入错误,被操作的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 市场营销调研与需求预测
- 2027届福建省仙游县联考化学九年级第一学期期中统考试题含解析
- 公共行政学概述
- 2026华发杯高尔夫球赛提案
- 2026中国智能港口行业市场应用与发展趋势分析研究报告
- 12009中国零售业防损调查报告
- 模拟电子技术基础 2篇 4章1
- 2026健身APP与智能防护硬件数据互通商业模式验证报告
- 27版53高中同步新教材生物必修1人教版练习册第6章专题强化练3 有丝分裂图像及相关图示分析
- 2026中国通讯设备行业政策分析现状研究发展评估报告
- 陕西省宝鸡市2026年初一新生入学分班数学考试真题及答案
- 剖宫产术的护理配合
- 第15讲 开学综合摸底检测试卷及答案-2026年秋三升四小学数学(人教版新教材适配)
- 2026年江苏省事业单位公开招聘考试真题与答案
- 净水厂调试 运营方案
- 2026年初中历史中国近现代史专题讲座
- 2026年危急值报告制度试题及答案
- 2025至2030中国医疗机构手部消毒产品替代趋势与市场格局变化报告
- 机物料采购管理制度范本
- 初中生物细胞结构功能3D打印模型教学应用分析教学研究课题报告
- 预防安全踩踏事故课件
评论
0/150
提交评论