3.3 变量
变量有不同的内涵,称为类型。建立这个类型系统的原因是,不同类型的数据需要用不同的方法来处理。
要使用变量,需要声明它们。即给变量指定名称和类型。声明变量后,就可以把它们用作存储单元,存储所声明的数据类型的数据。
声明变量的C#语法是指定类型和变量名,如下所示:
<type> <name>;
如果使用未声明的变量,代码将无法编译。另外,使用未赋值的变量也会产生一个错误,编译器会检测出这个错误。
3.3.1 简单类型
简单类型就是组成应用程序中基本构件的类型,例如,数值和布尔值(true 或false)。简单类型与复杂类型不同,没有子类型或特性。
不同的整数类型可以用于存储不同范围的数值,占用不同的内存空间(至多64位),这些类型如下所示。
一些变量名称前面的“u”是unsigned的缩写,表示不能在这些类型的变量中存储负数,参见该表中的“允许的值”一列。
可以使用的浮点数变量类型有3种,float、double和decimal。前两种可以用+/- m×2e的形式存储浮点数,m和e的值因类型而异。decimal使用另一种形式:+/- m×10
e。这3种类型、其m和e的值,以及它们在实数中的上下限如表3-2所示。
除了数值类型外,另外还有3种简单类型,如表3-3所示。
注意组成string的字符数没有上限,因为它可以使用可变大小的内存。
下面用一个简短示例来声明和使用它们。创建一个控制台应用,参考:(原创)c#学习笔记02--编写c#程序02--控制台应用程序,代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Ch03Ex01 { class Progra { static void Main( string[] args ) { int myInteger; string myString; myInteger = 17; myString = "\"myInteger\" is"; Console.WriteLine( "{0} {1}.", myString, myInteger ); Console.ReadKey(); } } }
运行结果为:
示例的说明
我们添加的代码完成了以下3项任务:
声明两个变量
给这两个变量赋值
将两个变量的值输出到控制台上
变量声明使用下述代码:
int myInteger; string myString;
第一行声明一个类型为int的变量,第二行声明一个类型为string的变量。
note: 变量的命名是有限制的,不能使用任意的字符序列。
接下来的两行代码为变量赋值:
myInteger = 17; myString = "\"myInteger\" is";
使用=赋值运算符给变量分配两个固定的值(在代码中称为字面值)。把整数值17赋给myInteger,把字符串"myInteger"(包括引号)赋给myString。以这种方式给字符串赋予
字面值时,必须用双引号把字符串括起来。因此,如果字符串本身包含双引号,就会出现错误,必须用一些表示这些字符的其他字符(即转义序列)来替代它们。本例使用序列\"来转
义双引号:
myString = "\"myInteger\" is";
如果不使用这些转义序列,而输入如下代码:
myString = ""myInteger" is";
就会出现编译错误。
注意给字符串赋予字面值时,必须小心换行——C#编译器会拒绝分布在多行上的字符串字面值。如果要添加一个换行符,可以在字符串中使用换行符的转义序列,即\n。例如:
myString = "This string has a\nline break.";
则会输出:
下面继续解释代码,还有一行没有说明:
Console.WriteLine( "{0} {1}.", myString, myInteger );
在括号中,有如下两项:
一个字符串
一个用逗号分隔的变量列表,这些变量的值将插入到输出字符串中
输出字符串是"{0} {1}.",它们并没有包含有用的文本。可以看出,这并不是我们运行代码时希望看到的结果,其原因是:字符串实际上是插入变量内容的一个模板,字符串
中的每对花括号都是一个占位符,包含列表中每个变量的内容。每个占位符(或格式字符串}用包含在花括号中的一个整数来表示。整数从0开始,每次递增1,占位符的总数应等于
列表中指定的变量数,该列表用逗号分隔开,跟在字符串后。把文本输出到控制台时,每个占位符就会用每个变量的值来替代。在上面的示例中,{0}用第一个变量的值myString
替换,{1}用myInteger的内容来替换。
最后一行代码在前面的示例中也出现过,用于在程序结束前等待用户输入内容:
Console.ReadKey();