一 C#代码的基本格式
C#中编写程序时,代码都必须放在一个类的内部,在定义类时需要用到class关键字,class关键字前面可以加一些访问修饰符控制类的访问权限,定义类的具体语法格式如下。
[修饰符] class 类名{
程序代码
}
在编写C#代码时,除了要遵从语法格式外,还需要特别注意以下几点。
1.C#中的程序代码可分为结构定义语句和功能执行语句,其中,结构定义语句用于声明一个类或方法,功能执行语句用于实现具体的功能。每条功能执行语句的最后都必须用分号(;)结束,如下面的语句。
Console.WriteLine("这是第一个C#程序!");
值得注意的是,在程序中不要将英文的分号(;)误写成中文的分号(;),如果写成中文的分号,编译器会报错。
2.C#语言是严格区分大小写的。在定义类时,不能将class写成Class,否则编译会报错。程序中定义一个computer的同时,还可以定义一个Computer。computer和Computer是两个完全不同的符号,在使用时务必注意。
3.在编写 C#代码时,为了便于阅读,通常会使用一种良好的格式进行排版,但这并不是必须的,我们也可以在两个单词或符号之间任意换行,例如下面这段代码的编排方式也是可以的。
public class HelloWorld
{public static void Main(string [] args)
{Console.WriteLine("这是第一个C#程序!");}}
虽然C#没有严格要求用什么样的格式来编排程序代码,但是考虑到代码的可读性,应该让自己编写的程序代码整齐美观、层次清晰,通常会使用下面这种形式。
public class HelloWorld
{
public static void Main(string[] args)
{
Console.WriteLine("这是第一个C#程序!");
}
}
二 如何注释
在编写程序时,为了使代码易于阅读,通常会在实现功能的同时为代码加一些注释。注释是对程序中某个功能或者某行代码的解释、说明,在编译程序时编译器不会编译这些注释信息。
C#中的注释有3种类型,具体如下。
1.单行注释
单行注释通常用于对程序中的某一行代码进行解释,用符号“//”表示,“//”后面为被注释的内容,具体示例如下。
int c = 10; //定义一个整型变量
2.多行注释
多行注释就是注释中的内容可以为多行,它以符号“/*”开头,以符号“*/”结尾,具体示例如下。
/* int c = 10;
int x = 5; */
3.文档注释
文档注释用于对类或方法进行说明和描述。在类或方法前面连续输入 3 个“/”,就会自动生成相应的文档注释,用户需要手动填写类或方法的描述信息,来完成文档注释的内容。
脚下留心
在C#中,有的注释可以嵌套使用,有的则不可以,下面列出两种具体的情况。
(1)多行注释“/*…*/”中可以嵌套单行注释“//”,举例如下。
/* int c = 10; //定义一个整型的c
int x = 5; */
(2)多行注释“/*…*/”中不可以嵌套多行注释“/*…*/”,举例如下。
/*
/*int c = 10;*/
int x=5;
*/
上面的代码无法通过编译,原因在于第一个“/*”会和第一个“*/”进行配对,而第二个“*/”则找不到匹配对象。
三 C#中的关键字
关键字是编程语言里事先定义好并赋予了特殊含义的单词,也称作保留字。和其他语言一样,C#中保留了许多关键字,例如class、public等,下面列举的是C#中所有的关键字。
abstract as base bool break byte case
catch char checked class const continue decimal
default delegate do double else enum event
explicit extern false finally float for foreach
goto if implicit in int interface internal
is lock long namespace new null object
operator out override params private protected public
readonly ref return sbyte sealed short sizeof
stackalloc static string struct switch this throw
true try typeof uint ulong unchecked unsafe
ushort using virtual void volatile while
上面列举的关键字中,每个关键字都有特殊的作用,例如 namespace 关键字用于声明命名空间,using 关键字用于引入命名空间,class 关键字用于声明一个类。在本教材后面的章节中将逐步对其他关键字进行讲解,在此没有必要对所有关键字进行记忆,只需要了解即可。
值得一提的是,在使用C#关键字时,需要注意以下两点。
● 所有的关键字都是小写的。
● 程序中的标识符不能以关键字命名。
四 C#中的标识符
在编程过程中,经常需要在程序中定义一些符号来标记一些名称,如类名、方法名、参数名、变量名等,这些符号被称为标识符。标识符可以由任意顺序的大小写字母、数字、下画线(_)组成,但标识符不能以数字开头,且不能是C#中的关键字。
下面的这些标识符都是合法的。
username
username123
user_name
_userName
注意,下面的这些标识符都是不合法的。
123username 以数字开头
class 这是关键字
98.3 数字开头
Hello World 出现了空格
在C#程序中定义的标识符必须要严格遵守上面的规范,否则程序在编译时会报错。除此之外,为了增强代码的可读性,建议初学者在定义标识符时还应该遵循以下规范。
1.类名、方法名和属性名中的每个单词的首字母要大写。例如 ArrayList、LineNumber、Age。这种命名方式被称为大驼峰命名法或帕斯卡(Pascal)命名法。
2.字段名、变量名的首字母要小写,之后的每个单词的首字母均为大写。例如age、userName。这种命名方式被称为小驼峰命名法。
3.常量名中的所有字母都大写,单词之间用下画线连接。例如DAY_OF_MONTH。
4.在程序中,应该尽量使用有意义的英文单词来定义标识符,使得程序便于阅读。例如使用username表示用户名,password表示密码。
五 常量
常量就是在程序中固定不变的值,是不能改变的数据。例如数字1、字符'a'、浮点数3.2等。在C#中,常量包括整型常量、浮点数常量、布尔常量、字符常量等。接下来对这些常量进行详细讲解。
1.整型常量
整型常量是整数类型的数据,有二进制、八进制、十进制和十六进制4种表示形式,具体如下。
● 二进制:由数字0 和1 组成的数字序列,如01000000、10000001。
● 八进制:以0开头并且其后由0~7(包括0和7)的整数组成的数字序列,如0342。
● 十进制:由数字0~9(包括0和9)的整数组成的数字序列,如198。
● 十六进制:以0x或者0X开头并且其后由0~9、A~F(包括0和9、A和F)组成的数字序列,如0x25AF。
需要注意的是,在程序中为了标明不同的进制,数据都有特定的标识,八进制必须以0开头,如0711、0123;十六进制必须以0x或0X开头,如0xaf3、0Xff;整数以十进制表示时,第一位不能是0,0本身除外。例如十进制的127,用二进制表示为01111111,用八进制表示为0177,用十六进制表示为0x7F或者0X7F。
2.浮点数常量
浮点数常量就是在数学中用到的小数,分为float单精度浮点数和double双精度浮点数两种类型。其中,单精度浮点数后面以F或f结尾,而双精度浮点数则以D或d结尾。当然,在使用浮点数时也可以在结尾处不加任何的后缀,此时虚拟机会默认为double双精度浮点数。浮点数常量还可以通过指数形式来表示,具体示例如下。
2e3f 3.6d 0f 3.84d 5.022e+23f
上面列出的浮点数常量中用到了e和f,初学者可能会感到困惑,在后面的2.2.2小节中将会详细介绍。
3.字符常量
字符常量用于表示一个字符,一个字符常量要用一对英文半角格式的单引号('')引起来,它可以是英文字母、数字、标点符号以及由转义序列来表示的特殊字符。具体示例如下。
'a' '1' '&' '\r' '\u0000'
上面的示例中,'\u0000'表示一个空白字符,即在单引号之间只有一个表示空白的空格。之所以能这样表示是因为C#采用的是Unicode字符集,Unicode字符以\u开头,空格字符在Unicode码表中对应的值为'\u0000'。
4.字符串常量
字符串常量用于表示一串连续的字符,一个字符串常量要用一对英文半角格式的双引号("")引起来,具体示例如下。
"HelloWorld" "123" "Welcome \n XXX" ""
一个字符串可以包含一个字符或多个字符,也可以不包含任何字符,即长度为零。
5.布尔常量
布尔常量即布尔型的true和false两个值,该常量用于区分一个事物的真与假。
6.null常量
null常量只有一个值null,表示对象的引用为空。关于null常量将会在第4章中详细介绍。
多学一招:特殊字符——反斜杠(\)
在字符常量中,反斜杠(\)是一个特殊的字符,被称为转义字符,它的作用是用来转义后面一个字符。转义后的字符通常用于表示一个不可见的字符或具有特殊含义的字符,例如换行\n。下面列出一些常见的转义字符。
● \r 表示回车,将光标定位到当前行的开头,不会跳到下一行。
● \n 表示换行,换到下一行的开头。
● \t 表示制表符,将光标移到下一个制表符的位置,就像在文档中用Tab键一样。
● \b 表示退格符号,就像键盘上的Backspace键。
以下的字符都有特殊意义,无法直接表示,所以用斜杠加上另外一个字符来表示。
● \' 表示单引号字符,C#代码中单引号表示字符的开始和结束,如果直接写单引号字符('),程序会认为前两个是一对,会报错,因此需要使用转义(\')。
● \"表示双引号字符,C#代码中双引号表示字符串的开始和结束,包含在字符串中的双引号需要转义,比如"hesays,\"thank you\"."。
● \\ 表示反斜杠字符,由于在 C#代码中的\是转义字符,因此需要表示字面意义上的\,就需要使用\\。
六 变量
变量:在程序运行期间,随时可能产生一些临时数据,应用程序会将这些数据保存在一些内存单元中,每个内存单元都用一个标识符来标识。这些内存单元我们称之为变量,定义的标识符就是变量名,内存单元中存储的数据就是变量的值。
接下来通过具体的代码来学习变量的定义。
int x = 0,y;
y = x+3;
上面的代码中,第一行代码的作用是定义了两个变量 x 和 y,也就相当于分配了两块内存单元,在定义变量的同时为变量x分配了一个初始值0,而变量y没有分配初始值,变量x和y在内存中的状态如图所示。
第二行代码的作用是为变量赋值,在执行第二行代码时,程序首先取出变量 x 的值,与 3相加后,将结果赋值给变量y,此时变量x和y在内存中的状态发生了变化,如图所示。
图x、y 变量在内存中的状态
从图以及上面的描述中不难发现,变量实际上就是一个临时存放数据的地方。在程序中,可以将指定的数据存放到变量中,方便随时取出来再次进行使用。变量对于一段程序的运行是至关重要的,初学者在后续的学习中会逐步地了解变量的作用。
2.2.2 变量的数据类型
C#是一门强类型的编程语言,它对变量的数据类型有严格的限定。在定义变量时必须声明变量的类型,在为变量赋值时必须赋予和变量同一种类型的值,否则程序会报错。
在C#中,变量的数据类型可分为两大类,即值类型和引用类型。这两大类又分为很多数据类型,具体如图所示。
.
图2-4 数据类型
下面针对图 2-4 中所示的数值型、字符型和布尔型进行详细讲解。对于值类型中的其他类型以及引用类型,由于比较复杂,在这里讲解初学者无法理解,因此放到后面的章节中再做讲解。
1.整数类型变量
整数类型变量用来存储整数数值,即没有小数部分的值。在C#中,为了给不同取值范围的整数合理地分配存储空间,整数类型分为 4 种不同的类型:字节型(byte)、短整型(short)、整型(int)和长整型(long),4种类型所占存储空间的大小以及取值范围如表所示。
表中,列出了4种整数类型变量所占的空间大小和取值范围。其中,占用空间指的是不同类型的变量分别占用的内存大小,如一个int类型的变量会占用4字节大小的内存空间。取值范围是变量存储的值不能超出的范围,如一个byte类型的变量存储的值必须是-27~ 27-1的整数。
在为一个long类型的变量赋值时需要注意一点,所赋值的后面要加上一个字母“L”(或小写“l”),说明赋值为long类型。如果赋的值未超出int型的取值范围,则可以省略字母“L”(或小写“l”)。具体示例如下。
long num = 2200000000L; //所赋的值超出了int型的取值范围,后面必须加上字母L
long num = 198L; //所赋的值未超出int型的取值范围,后面可以加上字母L
long num = 198; //所赋的值未超出int型的取值范围,后面可以省略字母L
2.浮点数类型变量
浮点数类型变量用来存储小数数值。在C#中,浮点数类型分为两种:单精度浮点数(float)、双精度浮点数(double),double型所表示的浮点数比float型更精确,两种浮点数所占存储空间的大小以及取值范围如表所示。
表中,列出了两种浮点数类型变量所占的空间大小和取值范围。在取值范围中,E 表示以10为底的指数,E后面的“+”号和“-”号代表正指数和负指数,例如1.4E-45表示1.4*10-45。
在C#中,一个小数会被默认为double类型的值,因此在为一个float类型的变量赋值时需要注意一点,所赋值的后面一定要加上字母“F”(或者小写“f”),而为 double 类型的变量赋值时,可以在所赋值的后面加上字符“D”(或小写“d”),也可以不加。具体示例如下。
float f = 123.4f; //为一个float类型的变量赋值,后面必须加上字母f
double d1 = 100.1; //为一个double类型的变量赋值,后面可以省略字母d
double d2 = 199.3d; //为一个double类型的变量赋值,后面可以加上字母d
在程序中也可以为一个浮点数类型变量赋予一个整数数值,例如下面的写法也是可以的。
float f = 100; //声明一个float类型的变量并赋整数值
double d = 100; //声明一个double类型的变量并赋整数值
3.字符类型变量
字符类型变量用于存储一个单一字符,在C#中用char表示。C#中每个char类型的字符变量都会占用2字节。在给char 类型的变量赋值时,需要用一对英文半角格式的单引号(' ')把字符括起来,如'a'。
char c = 'a'; //为一个char类型的变量赋值字符'a'
4.布尔类型变量
布尔类型变量用来存储布尔值,在 C#中用 bool 表示,该类型的变量只有两个值,即 true和false。具体示例如下。
bool flag = false; //声明一个bool类型的变量,初始值为false
flag = true; //改变flag变量的值为true