创建一个控制台应用程序,输出文字“欢迎进入C#世界!”
1.单击“工具箱”按钮,将工具箱中的2个label、2个button、2个 textBox控件拖拽到Form1窗体中,并适当调整各控件的位置、大小。lable是文字,textBox是文本框,button是按键,在属性里可以改名字。
3.按【F5】键调试程序,在弹出的登录页面中输入用户名和密码,单 击“确定”按钮后会出现一个信息提示框,效果如图1-24所示。若想重新输 入内容,则单击“取消”按钮,文本框中的内容将被清空。至此,我们创建 了一个简单的Windows窗体应用程序。
在计算机语言中,对于常量、变量、类、方法等也要定义名字,这些名称统称为标识符。
常量是指在程序执行过程中值保持不变的量,变量是指在程序过程中值可以改变的量。
常量分为字面常量和符号常量。 常量类型:
变量又叫变量标识符,由字母、数字和下划线组成,且第一个字符必须是字母或下划线,变量名不允许使用C#关键字、系统函数名和系统类名。
程序员对变量命名的约束: 1.标识符采用英文单词或其组合。保证直观且用词准确,可望文知意。 2.遵循最小化长度与最大化信息量原则。在保证一个标识符意思明确的同时,应当尽量缩短其长度。 3.避免标识符过于相似。不要出现仅靠大小写区分的相似标识符,例如“i”与“I”,“function”与“Function”等。 4.用正确的反义词组命名具有互斥意义的标识符。例如“nMinValue”和“nMaxValue”“GetName)”和“SetName)”等。 5.除非逻辑上的确需要编号,否则尽量避免名字中出现数字编号。例如Valuel,Value2等,以防产生无意义的名字。 6.保持在整个模块中命名风格的统一性。例如,在编写一个派生类或模块的时候,要道循其基米或整体模块的命名风格。
变量的定义:数据类型 变量名1,变量名2,……,变量名n;
变量的分类:变量分为静态变量、非静态变量、数组元素、值参数、引用参数、局部变量。
内置类型和构造类型 内置类型:object(对象类型);string(字符串);byte,sbyte,int,uint,short,ushort,long,ulong(整数类型);char,bool(字符类型);float,double,decimal(浮点类型) 构造类型:枚举,数组,结构,集合,类,接口,委托
值类型和引用类型:
值类型:1.整数数据类型:整型数据类型是指变量的值为整数的值类型。
整数:int(有符号)和uint(无符号) 短整型:short和ushort 长整型:long和ulong byte型:byte和sbyte 注:变量默认为int类型,后缀字符不区分大小写。例:long I =1234L
2.浮点数类型:float(单精度类型),double(双精度类型),decimal(此类型适用于金融货币方面的计算) 注:浮点数类型默认是double类型,float类型后缀字符为F,decimal后缀字符为M
3.布尔类型:true和false
4.字符类型:数字字符、英文字母、特殊符号
用来表示运算的符号称为运算符,用运算符把运算对象连接起来的有意义的式子称为表达式。
注:++i:在使用i之前,先使i加1,--i在使用i之前,先使i减1,i++:在使用i之后,再使i加1,i-- 在使用i之后,再使i减1,
【>(大于),<(小于), >=(大于等于), <=(小于等于) , ==(等于) , !=(不等于)】
逻辑非"!"(真输出假,假输出真),逻辑与"&"(有一个为假输出假),逻辑异或"^"(相同输出假,不同输出真),逻辑或"|"(只要一个为真就输出真),条件逻辑与"&&",条件逻辑或"||"
格式:变量名=数值/表达式 复合赋值运算符:+=,-=, *=,/=、<<=、>>=、&=、^=、|= 注:最后都会给原变量赋值
C#唯一三目运算符:“?:”
隐式转换是系统默认的不必加以说明就可以进行的转换。
如果希望将高精度转换为低精度数据,必须使用强制转换表达式将源类型转化为目标类型,这种数据转换方式称为显式转换,又叫强制转换。
可以通过“Convert.方法名(参数)”来使用
注:C#程序的基本单位是语句。
注:Math类中Pow(double x,double y)方法用于返回指定数字(x)的指定幂(y)。
修饰符:访问权限修饰符是最常用的方法修饰符,用于声明方法访问级别。此参数为可选参数,默认值为私有访问private*(内调外可以,外调内不可以)*。
注:C#语言中,程序集是指类被组合后的逻辑单位和物理单位,其编译后的文件扩展名通常为“.dll”、“.exe”。
二、变量的作用域
一、方法调用格式
1.实例化方法所在的类,创建对象。格式:
2.调用方法
格式为 对象名.方法名(参数)
调用方法时,有以下几点需要注意: (1)调用方法时的参数是实际参数,简称“实参”。实参个数和类型必须与方法声明时的形参一致,如果方法声明时没有参数,则调用时也不用给参数,实参可以是常量,有的变量或能求值的表达式。 (2)方法名后必须包含一对圆括号,调用无参方法也不例外。 (3)调用方法后有返回值可直接输出,成能给来一变量,或参与另一个表达式的运算。
二、方法参数
若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。
传递到 ref 参数的参数必须最先初始化。这与 out 不同,out 的参数在传递之前不需要显式初始化。
如果一个方法采用 ref 或 out 参数,而另一个方法不采用这两类参数,则可以进行重载。
使用了static修饰符的方法为静态函数,反之为非静态方法。
静态方法是一种特殊的成员方法,他不属于类的某个具体的实例,而属于类本身(用类点名不用实例名)。格式:
通过不同的参数类型、参数个数或者参数类型的顺序来区分,这种方式叫做方法的重载。
操作费重载是指将C#中已有的操作符赋予新的功能,但与该操作符本来的含义不冲突,使用时系统会根据操作数类型来判断具体执行哪一种运算。
逻辑变量也称作布尔变量,其定义方法为:
逻辑变量的值有true和false(默认为false)两个值,分别表示真和假。
bool值可以转换成字符串,另外,在C#中bool值不能和整数值进行互换,若用0表示false,用非零表示true则程序会报错。
表中前四种优先级相同,后两种优先级相同,且前者级别高于后者,关系运算符的运算结果为逻辑值true或false。
用逻辑运算符可以把不同类型的表达式连接起来组成逻辑表达式,逻辑表达式的值只能是true和false。
(1)顺序结构 顺序结构就是按照程序代码先后顺序自上而下地执行,直到程序结束,中间没有任何判断和跳转。 (2)选择结构 选择结构(又称分支结构)用于判断给定的条件,根据判断的结果来控制程序的流程。C#中,选择语句包括if语句和switch语句,用来解决实际应用中按不同情况进行不同处理的问题。本项目中我们就要学习这种结构。 (3)循环结构 循环结构用来描述重复执行某段算法的问题,可以减少重复书写程序代码的工作量,是程序设计中最能发挥计算机运算速度快这一特长的程序结构。我们将在项目五中学习这种程序结构。
(一)if语句的基本结构
该语句的功能是:首先判断表达式1的值,如果值为真,则执行语句1,否则判断表达式2的值;如果表达式2的值为真,则执行语句2,否则判断表达式3的值;依此类推,若所有表达式的值为假,则执行语句n+1。
(二)if语句的嵌套
(三)if语句的注意事项
else必须与if配套使用,它总是与它上面最近的且未配对的if配对。
swith语句的一般表达形式如下:
格式:
while语句实现的循环是“当型循环”,即先测试循环条件再执行循环体。当条件表达式成立时才执行后面的循环语句,否则不执行。执行完循环体代码块后,while语句返回来再判断条件表达式的否成立,若成立则继续下一轮循环,如此循环往复,直到条件表达式为假,才退出整个while语句。
格式:
与while循环语句不同,do循环语句属于“直到型循环”,即首先执行代码块循环体,再判断条件表达式。若条件表达式成立,继续执行循环体,否则结束循环。因此,do语句的循环体至少会执行一次。
格式:
for语句中变量初始化部分只在开始时执行一次,然后判断条件表达式,若为true,则执行代码块循环体,然后执行控制变量更新表达式,再回头来判断条件表达式是否成立,以决定下一次循环;若条件表达式为false,则结束整个循环语句。
因此,for语句与while语句一样,当第一次判断条件表达式不成立时,则循环体一次都不执行。
使用 for循环语句时要注意以下事项:
(1)需要让一个循环控制变量递增或递减1时,既可使用复合赋值运算符,也可使用自增自减运算符,后者因为更简练所以常被采用,例如i++相当于i+=1。
(2) for语句圆括号内的3个部分都可以省略,但分隔用的分号不能省略。如果省略了条件表达式,那么默认为true。
(3)可在一个for循环语句中提供用逗号分隔的多个变量初始化表达式和多个控制变量更新表达式,但条件表达式只能有一个。
语句格式:
用于终止对循环的执行,流程直接跳转到当前循环语句的下一语句执行。
语句格式:
用于结束本次循环,即跳过本次循环体中余下的尚未执行的语句,接着再一次进行循环条件判断,以便执行下一次循环。
continue语句只能用于循环语句内部,用来结束本次循环,继续下一次循环条件的判断。
语法错误是指由于用户没有按编程语言规则编写代码而引起的错误,也称为编译错误。例如输入了不正确的关键字、缺少表达式、遗漏了某个必需的标点符号等等,是最明显和最容易改正的错误。 在编写代码时,VS会自动对程序进行语法检查,并提醒程序开发人员。
语义错误是指因应用程序在运行期间执行了非法操作或某些操作失败而引起的错误,也称运行错误,例如,打开的文件未找到、磁盘空间不足、网络连接断开、除法中除数为零等等。
逻辑错误是指应用程序未按照程序员预期的方式运行所产生的错误。例如设置的条件不合适、循环次数不当等,此时程序不会崩溃,但是执行的逻辑是错误的,用户不能得到想要的结果。
在定义数组后,必须对其进行初始化才能使用。初始化数组有两种方法:动态初始化和静态初始化。
(一)动态初始化
动态初始化需要借助new运算符,为数组元素分配内存空间并为数组元素赋初值,格式如下:
n为“数组长度”,可以是整型符号常量或已具有值的整型变量,后面一层大括号里为初始值部分。数组定义后,将占用连续的存储空间,其占用存储空间大小为“长度数据类型所占用的字节数*”。
1.不给定初始值的情况
如果不给出初始值部分,各元素取默认值,数值类型初始化为0或0.0,布尔类型初始化为false,字符串类型初始化为null。例:
在程序运行时,系统将数组a分配一个连续的40字节的存储单元,该数组在内存中各数组元素均取默认值0。
C#中的数组的大小可以动态确定,例如下面语句:
2.给定初始值的情况
给出初始值时部分,可在大括号中列出数组中各元素相应的初值,且可以省略“数组长度”。例如:
在这种情况下,不允许“数组长度”为变量。
如果给出“数组长度”,则初始值的个数应与“数组长度”相等,否则出错。
(二)静态初始化
静态初始化数组的语法格式如下:
用这种方法对数组进行初始化时,无需说明数组元素的个数,只需按顺序列出数组中的全部元素即可,系统会自动计算并分配数组所需的内存空间。
例如,静态初始化整型数组 myarr:
在这种情况下,不能将数组定义和静态初始化分开。
(三)数组元素的引用
在C#中通常并不把数组作为一个整体进行处理,参与运算和数据处理的一般都是数组元素。引用一维数组元素的格式如下:
数组元素的下标从0开始,因此具有N个元素的数组,其下标范围为0~N-1。例如:
那么,数组a具有元素a[0],a[1],a[2],a[3]和a[4]。 在程序中数组元素可以像同类的普通变量一样参加赋值、运算、输入和输出等操作。例如,以下语句用于输出数组 myarr的所有元素值:
需要注意的是,在C#中不允许下标越界,即C#在运行时将对下标越界进行检查。在上面定义的数组a,数组元素a[5]和a[6]均是不可用的。
二维数组是有两个下标的数组,它适合处理如成绩报告表、矩阵等具有行列结构的数据。与C和C++不同的是,C#的二维数组的每一行的数组元素个数可以相等,也可以不相等。每行数组元素个数相同的二维数组称为方形二维数组,不同的称参差数组。
(一)方形二维数组
(1)动态初始化
语法格式为:
二维数组数组的元素个数为“长度1×长度2”个。
例如:int[ , ]a=new int[3.4];定义了一个数组a,该数组的数据类型是int,具有12个元素上述语句可以写成两条,如:
从逻辑上看,方形二维数组是一种“行列”结构,由若干行和若干列组成,如上例中是义的数组a有3行,每行有4列,逻辑结构如下:
第1行 a[0.0] a[0.1] a[0,2] a[0,3]
第2行 a[1,0] a[1,1] a[1,2] a[1,3]
第3行 a[2,0] a[2,1] a[2.2] a[2,3]
动态初始化时,也可以为数组赋值,例如:
(2)静态初始化
语法格式为:
上述语句中定义的二维数组,同时给它的各行赋初值。如果各初值列表中的初值个数相等,则创建的是方形二维数组。二维数组的行数由分组的个数确定。例如:
该语句定义了具有12个元素的二维数组b,并依次赋初值,初值情况为:
b[0.0]=1,b[0.1]=2,b[0.2]=3,b[0,3]=4, b[1,0]=5,b[1,1]=6,
b[1.2]-7,b[1,3]=8,b[2,0]=9,b[2,1]=10,
b[2.2]=11,b[2,3]=12。
(3)元素引用
引用二维数组元素的一般格式为:
(二)参差数组
参差数组的定义一般分为两步:首先定义二维数组占有的行数,然后定义每行的列数并分配空间。
(1)分配行 语法格式为:
例如:
(2)分配各行数组元素个数
分配了参差数组占有的行后,应为每一行(可看作一维数组)分配数组元素个数,语句格式为:
上述语句为参差数组的i行分配数组元素个数,元素个数由“长度”指定。例如:
给各行分配数组元素时,可以给元素赋初值,赋初值和引用参差二维数组元素的方法同方形数组.