![C# 从入门到项目实践(超值版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/707/27111707/b_27111707.jpg)
第3章
C#程序开发基础——常量与变量
学习指引
常量是什么?其实常量就是一个固定的东西,可以说是固定的字符,也可以说是固定的字符串,或者是固定的整数。变量,顾名思义就是会变的量,在数学中经常用变量来解方程,假设x和y各等于什么,其中x和y就是变量,读者可以把变量当成一个可变的值来理解。
重点导读
- 熟悉常量的类型。
- 掌握常量的定义。
- 熟悉变量的声明与定义。
- 掌握变量的使用。
- 掌握变量的类型。
3.1 常量
常量是固定值,程序执行期间不会改变。常量可以是任何基本数据类型,例如整数常量、浮点常量、字符常量或者字符串常量,还有枚举常量。常量也可以被当作常规的变量,只是它们的值在定义后不能被修改。
3.1.1 整数常量
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P46_5945.jpg?sign=1739248482-h9bNwSZ5B83byMswv81Vgi90ZICL6Idc-0-4324a51fce36a857d2176aaed0f37814)
整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数,如“0x”或“0X”表示十六进制,“0”表示八进制,没有前缀则表示十进制。
整数常量也可以有后缀,可以是U和L的组合,其中,U表示unsigned,其含义是指一个无符号的数据;L表示long,其含义是指一个长整型数据。后缀可以是大写或者小写,多个后缀以任意顺序进行组合。
例如,以下为整数常量的一些实例:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T47_66524.jpg?sign=1739248482-uc7TwwJL76IIBbY5k9bLu47NjwWm6FkM-0-fc81bbcbad05da27d8c989af8ae0fa71)
以下是各种类型的整数常量的实例:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T47_66525.jpg?sign=1739248482-w8s7v8v0Z2Yq9dwA6ZmL293IdaCSEuDt-0-2d1a6b6ac418e1463b74a2ab5c5c0149)
3.1.2 字符常量
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P47_6123.jpg?sign=1739248482-zeCxjsfkQAXZIU32EJhvlnfQxCnyiPl2-0-ec33eacce9fd62b9e3f7e87655020790)
在C#中,字符常量就是指单引号里的单个字符,如'a'。需要指出的是,在计算机中的数字和字符是两个完全不同的概念,数字用来计算,字符用来显示。例如,数字3是一个可以计算的数字,字符'3'仅仅是用来显示的符号。
例如:
Console.WriteLine('a'); Console.WriteLine('3');
还有一种特殊情况,如“\n”“\a”,像这样的字符常量就是通常所说的转义字符。这种字符是以反斜杠(\)开头,后面跟一个字符或者一个八进制或十六进制数,表示的不是单引号里面的值,而是“转义”,即转换为具体的含义。
如表3-1所示是C#中常见的转义字符。
表3-1 转义字符
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T47_66527.jpg?sign=1739248482-hfVIW8wGHWeZOpIWBkfXtRCt62JIk0dB-0-83ad15c92f195c88ce73931d3000aaa6)
【例3-1】编写程序,比较字符常量的含义。
(1)在Visual Studio 2017中,新建名称为“Project1”的文件。
(2)在代码编辑区域输入以下代码。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T48_66529.jpg?sign=1739248482-iPFIp7CUI3ONSxEfV2dJsEeunMXWAp9o-0-84b6b8bfc37cb89b26f103a0a7dc1343)
【程序分析】本例演示了字符常量的输出。在代码中输出了数值常量,如100;字符常量,如'a' 'A'等;还用到了转义字符,如“\n”“\'”“\"”“'\x20”等。第6行首先输出一个小写字母“a”,然后又输出一个大写字母“A”,接着输出一个转义字符“\n”,相当于输出一个换行符。第7行先输出一个数值常量100,接着输出一个转义字符“\x20”,相当于输出一个空格,接着输出转义字符“\'”,相当于输出一个单引号,接下来又输出空格、双引号,最后输出换行符。
在Visual Studio 2017中的运行结果如图3-1所示。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P48_6261.jpg?sign=1739248482-9fpLj7xLdn7Kdmbt5bnvf9eRJTg4PzrD-0-0e5e1ac6a4ac29097f5df4e40015a758)
图3-1 字符常量
3.1.3 字符串常量
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P48_6264.jpg?sign=1739248482-KDR0HTffu6sNIHT8fFPRDAJBKTiI4WWs-0-849d2b7ca65328847c0bd99cf4203399)
字符串常量可以通过两种方式来进行显示。第一种是通过双引号括起来,如" " "a" "abc" "abc\n"等。另一种是在双引号的前面加上字符@,如@"abc"、@"abc\n"等。所以字符串常量可以定义为在一对双引号里的字符序列或转义字符序列。
例如,带双引号:
Console.WriteLine("Hello C#!");
以@开头,后面跟一个带双引号的字符串:
Console.WriteLine(@"d:\root\subdir");
1. @控制符
@符号在C#中有以下两个作用。
(1)在字符串的前面加@表示取消字符串中的转义。
例如:
Console.WriteLine(@"C:\Docs\Source\a.txt");
等价于
Console.WriteLine("C:\\Docs\\Source\\a.txt");
如果要在@字符串中包含双引号,双倍添加即可:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T48_66535.jpg?sign=1739248482-oAXXtcXN6wnFtJExAdMIv4kwdTPZe81x-0-b56baaafaabdc68a20af4648b2676b24)
(2)在字符串的前面加@表示字符串可以分为多行书写。
【例3-2】编写程序,输出三个字符串类型的变量。
① 在Visual Studio 2017中,新建名称为“Project2”的文件。
② 在代码编辑区域输入以下代码。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T49_66537.jpg?sign=1739248482-egI0PCJI0ULSIZsJXhMgJWGv1kmq5PRz-0-fc41e27b6b6508299fe2b1ca0c807055)
【程序分析】本例演示了字符串和@控制符的使用。在代码中,第一个字符串变量str1输出的是一个字符串“Good morning!”。第二个字符串变量str2中使用了@,因此可以将转义字符“\”当作普通字符对待,最后输出了字符串“C:\Windows”。第三个字符串变量str3也使用了@,所以最后输出的字符串可以任意换行,换行符及缩进空格都计算在字符串长度之内。这里需要注意,如果想要在@字符串中包含双引号,必须双倍添加。
在Visual Studio 2017中的运行结果如图3-2所示。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P49_6478.jpg?sign=1739248482-ryW3FIm27MgbrzkosYxFbgeEy594byvu-0-d17c52fc9d9d9b130882ee8b4af5dbfb)
图3-2 @控制符
2. +运算符
两个字符串可以用“+”运算符连接起来,例如“Hello”+“World”的结果是“HelloWorld”。“+”运算符也可以连接其他变量类型。
【例3-3】编写程序,演示“+”运算符的使用。
(1)在Visual Studio 2017中,新建名称为“Project3”的文件。
(2)在代码编辑区域输入以下代码。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T49_66540.jpg?sign=1739248482-QsbLlFpuwdYjyZa6TaZP327ifk63h63i-0-d2c7bea41b8c7210c1596f2e30cd65b7)
【程序分析】本例演示了“+”运算符的使用。在代码中首先定义两个整型变量L和W,并对其赋值;然后再定义double类型的变量S,用于存储变量L和W的乘积。第一个WriteLine方法用于连接两个字符串;第二个WriteLine方法使用“+”运算符,先将变量S的值转换为字符串“150”,然后与“矩形面积S=”连接,最终合并成为字符串“矩形面积S=150”而输出。
在Visual Studio 2017中的运行结果如图3-3所示。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P49_6486.jpg?sign=1739248482-w3YmZllJBIEHNw79qIrJekpBDWwjCGyM-0-97d857230dc850992fbb3c30e84642ce)
图3-3 +运算符
3.1.4 浮点常量
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P50_6588.jpg?sign=1739248482-HHYejWtAxb36PX5sKloSA5MuuRos6mUr-0-ff099d037dc7fe7ea2871e5f8a76364d)
一个浮点常量是由整数部分、小数点、小数部分和指数部分组成。用户可以使用小数形式或者指数形式来表示浮点常量。
以下是一些浮点常量的实例:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T50_66543.jpg?sign=1739248482-y7Rr9EPmNRYDhQunQJBgDC0KYyNSima1-0-d4c0d2e7ccd78650b2d83b4d76218307)
使用小数形式表示时,必须包含小数点、指数或同时包含两者。使用指数形式表示时,必须包含整数部分、小数部分或同时包含两者。有符号的指数是用e或E表示的。
3.1.5 常量的定义
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P50_6589.jpg?sign=1739248482-lvLKPqsB1eO7ri6GlCEIbirfTJa5ei7t-0-7c41e497fbfb0ce8fa89e42771dac990)
所谓常量,就是在程序的运行过程中其值不能被改变的量。常量的类型也可以是任何一种C#的数据类型。
常量的定义格式为:
const 常量数据类型 常量名(标识符)=常量值;
其中,const关键字表示声明一个常量,“常量名”就是标识符,用于标识该常量。常量名要有代表意义,不能过于简洁或复杂。常量和变量的声明都要使用标识符,其命名规则如下。
(1)标识符必须以字母或者@符号开始。
(2)标识符只能由字母、数字以及下画线组成,不能包括空格、标点符号和运算符等特殊符号。
(3)标识符不能与C#中的关键字同名。
(4)标识符不能与C#中的库函数名相同。
在定义常量时,需要注意以下几点。
(1)常量值的类型要和常量数据类型一致,如果定义的是字符串型,常量值就应该是字符串类型,否则会发生错误。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T50_66545.jpg?sign=1739248482-6UFQxM39uwyFUmqGpPkRR8cr9JcAXiLU-0-505bea2a6085a6cdca298f6185ab20a4)
用户在后面的代码中试图改变这两个常量的值,则编译时会发现这个错误并使代码无法编译通过。
(2)常量在声明时必须初始化。
例如:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T50_66546.jpg?sign=1739248482-MYX7eBl6dSZEto4m1wIg2UdDKt3f5oax-0-766817316b6e78662acb693e5db793a3)
在此实例中,常量value始终为15,即使类本身也无法更改它。实际上,当编译器遇到C#源代码中的常量标识符(如value)时,它直接将文本值替换到它生成的中间语言(IL)代码中。因为运行时没有与常量相关联的变量地址,所以const字段不能通过引用传递,并且不能在表达式中显示为左值。
(3)可以同时声明多个同一类型的常量。
例如:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T50_66547.jpg?sign=1739248482-5QDZPu2dJJc0LqMFwpb6pRU2GvSQ5o6x-0-e02d08045ee1f1aff414e6e6525220de)
(4)如果不创建循环引用,则用于初始化常量的表达式可以引用另一个常量。
例如:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T51_66551.jpg?sign=1739248482-Y2ue3FSlMdWgI0xtyCtEUGbZAGw0v6SW-0-43ced9b8170062528b0e5fc9affdad95)
(5)可以将常量标记为public、private、protected、internal、protected internal或private protected。这些访问修饰符定义该类的用户访问该常量的方式。
(6)常量是作为静态字段访问的,因为常量的值对于该类型的所有实例都是相同的。不使用static关键字来声明这些常量。
【例3-4】编写程序,定义一个常量,计算出一个圆的面积。
① 在Visual Studio 2017中,新建名称为“Project4”的文件。
② 在代码编辑区域输入以下代码。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T51_66552.jpg?sign=1739248482-XQqKAmneGd3Ug8QMGO5gy01SP3pVBlKj-0-428127eddcb18e9a82589b9700df4805)
【程序分析】本例演示了常量的使用。在代码中首先声明一个常量PI,并赋值为3.14159;接着再定义一个double类型的变量r,用于表示半径;最后通过计算公式,输出圆的面积。
在Visual Studio 2017中的运行结果如图3-4所示。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P51_6761.jpg?sign=1739248482-jFQzrWwMPRQOBOWyws5HsTjwiFbiJA4u-0-02b85acfb87bd4d47701e6281e9e90c8)
图3-4 常量的定义