C#基本语法
2.1 C#程序结构
2.1.1 C#程序的组成要素
1. 关键字
在C#代码中常常使用关键字,关键字也叫保留字,是对C#有特定意义的字符串。关键字在Visual Studio 环境的代码视图中默认以蓝色显示。例如,代码中的using、namespace、class、static、void等,均为C#的关键字。
2. 命名空间
命名空间既是Visual Studio 提供系统资源的分层组织方式,也是分层组织程序的方式。因此,命名空间有两种,一种是系统命名空间,一种是用户自定义命名空间。
系统命名空间使用using关键字导入,System是Visual Studio .NET中的最基本的命名空间,在创建项目时,Visual Studio 平台都会自动生成导入该命名空间,并且放在程序代码的起始处。
3. 类和方法
C#中,必须用类来组织程序的变量与方法。
C#要求每个程序必须且只能有一个“Main”方法。“Main”方法必须放在某一个类中。“Main”方法是应用程序的入口。
4. 语句
语句就是C#应用程序中执行操作的指令。C#中的语句必须用分号“;”结束。可以在一行中书写多条语句,也可以将一条语句书写在多行上。
5. 大括号
在C#中,括号“{”和“}”是一种范围标志,是组织代码的一种方式,用于标识应用程序中逻辑上有紧密联系的一段代码的开始与结束。
大括号可以嵌套,以表示应用程序中的不同层次。
2.1.2 C#程序的格式
1. 缩进与空格
缩进用于表示代码的结构层次,这在程序中不是必须的,但是缩进可以清晰地表示程序的结构层次,在程序设计中应该使用统一的缩进格式书写代码。
空格有两种作用,一种是语法要求,必须遵守,一种是为使语句不至于太拥挤。例如:
int ia = 3;
2. 字母大小写
C#中的字母可以大小写混合,但是必须注意的是,C#把同一字母的大小写当作两个不同的字符对待,如,大写“A”与小写“a”对C#来说,是两个不同的字符。
3. 注释
C#中的注释基本有两种,一是单行注释,一是多行注释。单行注释以双斜线“// ”开始,不能换行。多行注释以“/*”开始,以“*/”结束,可以换行。
2.2 基本数据类型
2.2.1 数值类型
1. 整数类型
整数类型又有有符号整数与无符号整数。有符号整数可以带正负号,无符号整数不需带正负号,默认为正数。
有符号整数包括sbyte(符号字节型)、short(短整型)、int(整型)、long(长整型)。
无符号整数包括byte(字节型)、ushort(无符号短整型)、uint(无符号整型)、ulong(无符号长整型)。
2. 实数类型
实数类型包括float(单精度浮点型)、double(双精度浮点型)、decimal(十进制型)。
2.2.2 字符类型
1. Unicode字符集
Unicode是一种重要的通用字符编码标准是继ASCII字符码后的一种新字符编码,如UTF-16允许用16位字符组合为一百万或更多的字符。
C#支持Unicode字符集。
2. char(字符型)
char(字符型):数据范围是0~65535之间的Unicode字符集中的单个字符,占用2个字节。
char(字符型)表示无符号16位整数,char(字符型)的可能值集与Unicode字符集相对应。
3. string(字符串型)
string(字符串型):指任意长度的Unicode字符序列,占用字节根据字符多少而定。
string(字符串型)表示包括数字与空格在内的若干个字符序列,允许只包含一个字符的字符串,甚至可以是不包含字符的空字符串。
2.2.3 布尔类型和对象类型
bool(布尔型):表示布尔逻辑量。bool(布尔型)数据范围是“true”(真)和“false”(假)。bool(布尔型)占用一个字节。bool(布尔型)的值“true”(真)和“false”是关键字。
object(对象型):可以表示任何类型的值,其占用字节视具体表示的数据类型而定。
object(对象型)是所有其他类型的最终基类。C#中的每种类型都是直接或间接从object类型派生的。
2.3 变量与常量
2.3.1 变量
1. 变量命名规则
在C#中,变量命名规则如下:
① 变量名的第一个字符必须是字母(包括汉字)或下划线,其余字符必须是字母(包括汉字)、数字或下划线。
② 变量名不能是C#的关键字或库函数名。例如,sum,_S,都是合法的变量名,而int,2A,Number Of Student是非法变量名。
2. 声明变量
声明变量最简单的格式为:
数据类型名称 变量名列表;
例如:
int number; // 声明一个整型变量
bool open; // 声明一个布尔型变量
decimal bankBlance; // 声明一个十进制变量
可以一次声明多个变量,例如:
sbyte a , b; // 声明两个有符号字节型变量
如果一次声明多个变量,变量名之间用逗号分隔。
3. 变量赋值
C#规定,变量必须赋值后才能引用。为变量赋值需使用赋值号“=”。例如:
int number;
number = 32; // 为变量赋值32
也可以使用变量为变量赋值,例如:
bool close;
close=open; // 为变量赋值true(假设open为已声明的bool型变量,其值为true)
可以为几个变量一同赋值,例如:
int a , b , c;
a = b = c = 32;
可以在声明变量的同时为变量赋值,相当于将声明语句与赋值语句合二为一。例如:
double area , radius = 16;
2.3.2 常量
1. 直接常量
(1) 整型常量
整型常量即整数,整型常量有三种形式:
十进制形式,即通常意义上的整数,如,123,48910等。
八进制形式,输入八进制整型常量,需要在数字前面加“0”,如,0123,038等。
十六进制形式,输入十六进制整型常量,需要在数字前面加“0x”或“0X”,如,0×123,0X48910等。
(2) 实型常量
实型常量即带小数的数值,实型常量有两种表示形式:
小数形式,即人们通常的书写形式,如0.123,12.3,.123等等。
指数形式,也叫科学记数,由底数加大写的E或小写的e加指数组成,例如,123e5或123E5都表示123×105。
(3) 字符常量
字符常量表示单个的Unicode字符集中的一个字符,通常包括数字、各种字母、标点、符号和汉字等。
字符常量用一对英文单引号界定,如,’A',’a',’+',’汉’ 等等。
在C#中,有些字符不能直接放在单引号中作为字符常量,这时需要使用转义符来表示这些字符常量,转义符由反斜杠“\”加字符组成,如 ’\n’ 。
(4) 字符串常量
字符串常量是由一对双引号界定的字符序列,例如:
"欢迎使用C#!"
"I am a student."
需要注意的是,即使由双引号界定的一个字符,也是字符串常量,不能当做字符常量看待,例如,’A'与"A",前者是字符常量,后者是字符串常量。 (5) 布尔常量
布尔常量即布尔值本身,如前所述,布尔值true(真)和false(假)是C#的两个关键字。
2. 符号常量
符号常量使用const关键字定义,格式为:
const 类型名称 常量名=常量表达式;
常量定义中,“常量表达式”的意义在于该表达式不能包含变量及函数等值会发生变化的内容。常量表达式中可以包含其他已定义常量。
由于符号常量代表的是一个不变的值,所以符号常量不能出现在赋值号的左边。
如果在程序中非常频繁地使用某一常量,可以将其定义为符号常量 。
2.3.3 类型转换
数据类型的转换有隐式转换与显式转换两种。
1. 隐式转换
隐式转换是系统自动执行的数据类型转换。隐式转换的基本原则是允许数值范围小的类型向数值范围大的类型转换,允许无符号整数类型向有符号整数类型转换。
2. 显式转换
显式转换也叫强制转换,是在代码中明确指示将某一类型的数据转换为另一种类型。显式转换的一般格式为:
(数据类型名称)数据
例如:
int x=600; short z=(short)x;
显式转换中可能导致数据的丢失,例如:
decimal d=234.55M; int x=(int)d;
3. 使用方法进行数据类型的转换
(1) Parse方法
Parse方法可以将特定格式的字符串转换为数值。Parse方法的使用格式为:
数值类型名称.Parse(字符串型表达式)
例如:int x=int.Parse("123");
(2) ToString方法
ToString方法可将其他数据类型的变量值转换为字符串类型。ToString方法的使用格式为:
变量名称.ToString( )
例如:int x=123; string s=x.ToString( );
2.4 运算符与表达式
2.4.1 运算符与表达式类型
1. 算术运算符与算术表达式
算术运算符有一元运算符与二元运算符。
① 一元运算符:-(取负)、+(取正)、++(增量)、–(减量)。
② 二元运算符:+(加)、-(减)、*(乘)、/(除)、%(求余)。
由算术运算符与操作数构成的表达式叫算术表达式。
“-”与“+”只能放在操作数的左边 。增量与减量量符只能用于变量 。
二元运算符的意义与数学意义相同,其中%(求余)运算符是以除法的余数作为运算结果,求余运算也叫求模。例如:
int x=6,y=2,z;
z=x%y; // x除以y的结果不是3(商),而是0(余数)
要注意数据类型。例如:
int a,b=39; a=b/2; // a的值为18
2. 字符串运算符与字符串表达式
字符串运算符只有一个,即“+”运算符,表示将两个字符串连接起来。例如:
string connec="abcd"+"ef";
// connec的值为“abcdef”
“+”运算符还可以将字符型数据与字符串型数据或多个字符型数据连接在一起,例如:
string connec="abcd"+’e'+’f';
// connec的值为“abcdef”
3. 关系运算符与关系表达式
>,<,>=,<=,==,!=。
依次为大于,小于,大于等于,小于等于,等于,不等于。
用于字符串的关系运算符只有相等“==”与不等“!=”运算符。
4. 逻辑运算符与逻辑表达式
在C#中,最常用的逻辑运算符是!(非)、&&与、||(或)。
例如:
bool b1=!true; // b1的值为false
bool b2=5>3&&1>2; // b2的值为false
bool b3=5>3||1>2 // b3的值为true
5. 条件运算符与条件表达式
条件运算符是C#中唯一的三元运算符,条件运算符由符号“?”与“:”组成,通过操作三个操作数完成运算,其一般格式为:
布尔类型表达式?表达式1:表达式2
6. 赋值运算符与赋值表达式
在赋值表达式中,赋值运算符左边的操作数叫左操作数,赋值运算符右边的操作数叫右操作数。左操作数通常是一个变量。
复合赋值运算符,如“*=”、“/=”、“%=”、“+=”、“-=”等。
3.4.2 运算符的优先级与结合性
1. 优先级
① 一元运算符的优先级高于二元和三元运算符。
② 不同种类运算符的优先级有高低之分,算术运算符的优先级高于关系运算符,关系运算符的优先级高于逻辑运算符,逻辑运算符的优先级高于条件运算符,条件运算符的优先级高于赋值运算符。
③ 有些同类运算符优先级也有高低之分,在算术运算符中,乘、除、求余的优先级高于加、减;在关系运算符中,小于、大于、小于等于、大于等于的优先级高于相等与不等;逻辑运算符的优先级按从高到低排列为非、与、或。
2. 圆括号
可以使用圆括号明确运算顺序。例如:
string s=x>y?"greater than":x==y?"equal to":"less than";
string s=x>y?"greater than":(x==y?"equal to":"less than");
括号还可以改变表达式的运算顺序 :
b*c+d
b*(c+d),
3. 结合性
在多个同级运算符中,赋值运算符与条件运算符是由右向左结合的,除赋值运算符以外的二元运算符是由左向右结合的。例如,x+y+z是按(x+y)+z的顺序运算的,而x=y=z是按x=(y=z)的顺序运算(赋值)的。
2.5 C#常用方法与属性
2.5.1 日期时间类常用方法与属性
C#中的DateTime类提供了一些常用的日期时间方法与属性,该类属于System命名空间,在使用模板创建应用程序时,该命名空间的引用已自动生成,因此可以直接使用DateTime类。对于以当前日期时间为参照的操作,可以使用该类的Now属性及其方法。
日期时间类的Now属性的常用方法格式为:
DateTime.Now.方法名称(参数列表)
日期时间类的Now属性的常用属性格式为:
DateTime.Now.属性名称
2.5.2 常用数学方法与字段
C#中的Math类提供了一些常用的数学方法与字段,该类属于System命名空间。Math类是一个密封类,有两个公共字段和若干静态数学方法。
2.5.3 字符串的方法与属性
任何字符串变量与常量对象都具有字符串的方法与属性,可以使用这些方法与属性来处理字符串。
2.5.4 类型转换方法
Convert类提供了常用的字符串转换为其他数据类型,其他数据类型转换为字符串的方法。
2.5.5 随机方法
Random类提供了产生伪随机数的方法。产生随机数的方法必须由Random类创建的对象调用。Random类创建对象的格式为:
Random 随机对象名称=new Random( );
如果要声明一个随机对象rn,则代码为:
Random rn = new Random( );