C#中的数据类型可以分为常量和变量。顾名思义,变量即可以变化的量,而常量则是指不变的量。
在数学中,可以用y=x+1表示变量y和x的关系。C#中变量的含义和数学中类似,如可以在C#中声明两个变量x和y分别表示上述函数表达式中的x和y。在C#中为了保证变量的规范,对变量的命名采取了一定的限制,其规则如下:
· 标识符的第一个字符必须是字母、下划线“_”或“@”。
· 除第一个字符外,后面的字符可以是字母、下划线或数字。
· 标识符的名称不能使用C#的关键字。
下面针对上述3条规则列出一些规范和不规范的变量名以供参考。
规范的变量名如下所述。
· myA(大小写组合)。
· MY_a(大小写组合加连字符)。
· _MyA15(大小写加数字组合,连字符作为起始字符)。
不规范的变量名如下所述。
· 5pen(数字作为起始字符)。
· float(关键字作为标识符)。
· my-a(连字符“-”)。
其中,第3条规则中提到的关键字是指在C#中被保留作为它用的一些字符,这些字符一般都比较通用。在进行变量的命名时,不能使用与关键字完全相同的字符。C#中的关键字列表如表2-1所示。
表2-1 C#关键字列表
abstract |
event |
new |
Struct |
as |
explicit |
null |
switch |
base |
extern |
object |
this |
bool |
false |
operator |
throw |
break |
finally |
out |
true |
byte |
fixed |
override |
try |
case |
float |
params |
typeof |
catch |
for |
private |
uint |
char |
foreach |
protected |
ulong |
checked |
goto |
public |
unchecked |
class |
if |
readonly |
unsafe |
const |
implicit |
ref |
ushort |
continue |
in |
return |
using |
decimal |
int |
sbyte |
virtual |
default |
interface |
sealed |
volatile |
delegate |
internal |
short |
void |
do |
is |
sizeof |
while |
double |
lock |
stackalloc |
|
else |
long |
static |
|
enum |
namespace |
string |
|
在对变量进行命名时需注意表2-1中列出的关键字。在命名变量时还需要注意的一点是C#中的变量的大小写问题,即只有大小写不同的两个变量命名也是不同的。例如,变量MyData和变量MYDATA是不同的两个变量。
对上一节中介绍的变量命名规则有了一定的了解后,就可以进行变量的声明和使用了。下面仍以函数y=x+1为例说明变量的声明和使用。设y和x都为整数,在C#中定义y和x的方法如下:
int x;
int y;
上述两条语句声明了两个整数类型的变量x和y。这时,C#为这两个整数分配了存储空间。这个存储空间中只能存储整数。一种简单声明多个变量的方法如下:
int x ,y;
该语句同时声明了两个变量。此时,该存储空间中还没有任何数值。为变量x和y赋值的语句如下:
x = 1;
y = 2;
此时,变量x和y中分别存储了1和2两个整数。同样,可以在声明变量x和y的时候就对变量x和y赋值,这样做可以减少代码的行数。该方法代码如下:
int x = 1
int y = 2;
变量的特点即变量的值是可以改变的,可以在需要时更改变量的值,如可以用如下的代码改变变量x和y的值:
x = 23;
y = 56;
下面介绍一个小实例,使用第1章介绍的输出语句输出变量的值。
创建一个Windows控制台应用程序,并在控制台中输出用户定义变量的值。
(1)启动Visual Studio 2005。
(2)选择“文件”→“新建”→“项目”命令,打开“新建项目”对话框。
(3)在“项目类型”树形列表中选择Visual C#→Windows选项后,在“模板”列表中选择“控制台应用程序”选项。
(4)在“名称”文本框中输入项目的名称,此处为“OutputVar”。
(5)单击“确定”按钮,创建项目。
(6)Visual Studio 2005已经默认添加了几个文件,并自动打开其中的一个文件Program.cs。修改该文件中的Main方法内容如下:
static void Main(string[] args)
{
int x;
int y;
x = 10;
y = 20;
Console.WriteLine("x的值为:{0}", x);
Console.WriteLine("y的值为:{0}", y);
}
按Ctrl+F5组合键运行程序,运行结果如图2-4所示。按任意键可退出程序。
图2-4 运行结果
(1)Console.WriteLine。
第15行和第16行中的两条语句包含了Console.WriteLine的一种新的使用方法。第15行代码中的“{0}”在输出时由x替换,第16行代码中的“{0}”在输出时由y替换,即Console.WriteLine方法中在引号中的内容除原样输出外,“{0}”将被逗号后面的第一个参数的值所替代。
(2)int。
int表示整数类型,C#中除整数类型外还默认支持许多其他的类型,如表2-2所示。
表2-2 C#值类型列表
类型全称 |
类型简称 |
类型取值范围 |
System.Byte |
byte |
0~255 |
System.SByte |
sbyte |
-128~127 |
续上表
类型全称 |
类型简称 |
类型取值范围 |
System.Char |
char |
0~65 535 |
System.Decimal |
decimal |
-79 228 162 514 264 337 593 543 950 336~79 228 162 514 264 337 593 543 950 335 |
System.Double |
double |
-1.797 693 134 862 32e308~1.797 693 134 862 32e308 |
System.Single |
float |
-3.402 823 47E+38~3.402 823 47E+38 |
System.Int16 |
short |
-32 768~32 767 |
System.Uint16 |
ushort |
0~65 535 |
System.Int32 |
int |
-2 147 483 648~2 147 483 647 |
System.UInt32 |
uint |
0~4 294 967 295 |
System.Int64 |
long |
-9 223 372 036 854 775 808~9 223 372 036 854 775 807 |
System.UInt64 |
ulong |
0~18 446 744 073 709 551 615 |
System.Boolean |
bool |
True或False |
其中,float、double和decimal类型表示数值类型变量中的非整型数值,如3.141 592 6可以用非整型变量来表示。将上述实例中的Main方法修改如下,便可以输出非整型的数值:
static void Main(string[] args)
{
double x;
double y;
x = 3.1415926;
y = 1.414;
Console.WriteLine("x的值为:{0}", x);
Console.WriteLine("y的值为:{0}", y);
}
由此可见,Console.WriteLine方法支持多种类型的变量输出。表2-2的末尾一行列除了bool型变量,该变量用于描述真/假、是/否等含义。
在C#的引用类型变量中有一种string类型变量,被称为字符串,它具有和值类型相同的声明方式。字符串是由一系列的字符构成的。第1章中的“你好,C#!”即是一个字符串,但实例中并没有将其用一个变量来表示。
下面介绍一个实例,输出字符串类型的变量。
创建一个Windows控制台应用程序,并在控制台中输出用户定义字符串的值。
(1)启动Visual Studio 2005。
(2)选择“文件”→“新建”→“项目”命令,打开“新建项目”对话框。
(3)在“项目类型”树形列表中选择Visual C#→Windows选项后,在“模板”列表中选择“控制台应用程序”选项。
(4)在“名称”文本框中输入项目的名称,此处为“OutputString”。
(5)单击“确定”按钮,创建项目。
(6)Visual Studio 2005已经默认添加了几个文件,并自动打开其中的一个文件Pro-
gram.cs。修改该文件中的Main方法内容如下:
static void Main(string[] args)
{
//声明一个字符串变量,并对其赋值。
string x;
x = "这是一个字符串!";
//输出该字符串变量。
Console.WriteLine(x); }
按Ctrl+F5组合键运行程序,运行结果如图2-5所示。按任意键可退出程序。
图2-5 运行结果
代码中声明了一个字符串类型的变量x,该变量随后被赋值为“这是一个字符串!”。最后直接使用Console.WriteLine方法输出了该变量x。可以看到控制台中输出的是变量x所代表的字符串,即“这是一个字符串!”。
C#中存在许多变量类型。在实际应用中,经常需要对这些不同类型的数值进行转换,这其中包括隐式转换和显式转换。隐式转换即不是由程序开发人员明确指明如何进行转换,而是由C#进行自动的转换。如有一个整型的数值2,另有一个浮点型的数值2.3,使用隐式转换可以方便地将这两个数值进行各种运算。C#中可以进行的隐式转换如表2-3所示。
表2-3 C#值类型列表
原始数值类型 |
可转化目标数值类型 |
sbyte |
short、int、long、float、double或decimal |
byte |
short、ushort、int、uint、long、ulong、float、double或decimal |
short |
int、long、float、double或decimal |
ushort |
int、uint、long、ulong、float、double或decimal |
int |
long、float、double或decimal |
uint |
long、ulong、float、double或decimal |
long |
float、double或decimal |
char |
ushort、int、uint、long、ulong、float、double或decimal |
float |
double |
ulong |
float、double或decimal |
由上表中可以看到,C#中隐式转换的基本规则是由精度较低的类型转换为精度较高的类型。下面介绍一个简单的实例,演示C#中隐式转换的效果。
创建一个Windows控制台应用程序,演示C#中隐式转换的效果。
(1)启动Visual Studio 2005。
(2)选择“文件”→“新建”→“项目”命令,打开“新建项目”对话框。
(3)在“项目类型”树形列表中选择Visual C#→Windows选项后,在“模板”列表中选择“控制台应用程序”选项。
(4)在“名称”文本框中输入项目的名称,此处为“Convert1”。
(5)单击“确定”按钮,创建项目。
(6)Visual Studio 2005已经默认添加了几个文件,并自动打开其中的一个文件Program.cs。修改该文件中的Main方法内容如下:
static void Main(string[] args)
{
//分别定义两个整型变量x和y
int x = 4;
int y = 3;
//用double类型变量z储存x和y的和
double z = x + y;
//输出z的值
Console.WriteLine("x+y的和为{0}", z);
}
按Ctrl+F5组合键运行程序,运行结果如图2-6所示。按任意键可退出程序。
图2-6 运行结果
代码中整型变量x和y相加之后的结果为7,仍为整型数值。将其存储在double类型的变量z中时,C#自动将其变换为double类型的数值7,并不需要显式说明。
C#中还有一种类型转换方法——显式转换,即明确地给出目标类型的C#关键字。下面仍然用一个实例进行讲解。
创建一个Windows控制台应用程序,演示C#中显式转换的效果。
(1)启动Visual Studio 2005。
(2)选择“文件”→“新建”→“项目”命令,打开“新建项目”对话框。
(3)在“项目类型”树形列表中选择Visual C#→Windows选项后,在“模板”列表中选择“控制台应用程序”选项。
(4)在“名称”文本框中输入项目的名称,此处为“Convert2”。
(5)单击“确定”按钮,创建项目。
(6)Visual Studio 2005已经默认添加了几个文件,并自动打开其中的一个文件Pro-
gram.cs。修改该文件中的Main方法内容如下:
static void Main(string[] args)
{
//声明两个double类型的变量pi和r,分别表示圆周率和半径
double pi = 3.1415926;
double r = 2;
//计算圆的面积
double area = 2 * pi * r * r;
//输出圆的面积
Console.WriteLine("{0}", area);
//转换double类型的面积area为整型的面积area1,并输出
int area1 = (int)area;
Console.WriteLine("{0}", area1);
}
按Ctrl+F5组合键运行程序,运行结果如图2-7所示。
图2-7 运行结果
代码中计算了一个半径为2的圆面积,其中圆周率定义为3.141 592 6,求得其面积为25.132 740 8。当将该值转换为整型数值时,C#将其小数部分完全舍弃,得到的整数部分存储到整型变量area1中。
将上述实例中显式转换部分替换为如下代码:
//转换double类型的面积area为整型的面积area1,并输出
int area1 = area;
Console.WriteLine("{0}", area1);
当运行程序时Visual Studio 2005将给出错误提示,如图2-8所示。
图2-8 错误提示
由此可见,Visual Studio 2005提示无法将double类型直接转换为int类型,必须使用显式转换。
C#中还有一种常用的将数值转换为字符串类型的方法,非常方便,即使用ToString方法。下面通过实例说明ToString方法的用法。
创建一个Windows控制台应用程序,演示C#中ToString方法转换的效果。
(1)启动Visual Studio 2005。
(2)选择“文件”→“新建”→“项目”命令,打开“新建项目”对话框。
(3)在“项目类型”树形列表中选择Visual C#→Windows选项后,在“模板”列表中选择“控制台应用程序”选项。
(4)在“名称”文本框中输入项目的名称,此处为“Convert3”。
(5)单击“确定”按钮,创建项目。
(6)Visual Studio 2005已经默认添加了几个文件,并自动打开其中的一个文件Pro-
gram.cs。修改该文件中的Main方法内容如下:
static void Main(string[] args)
{
//声明两个double类型的变量pi和r,分别表示圆周率和半径
double pi = 3.1415926;
double r = 2;
//计算圆的面积
double area = 2 * pi * r * r;
string areastring = area.ToString();
//输出圆的面积
Console.WriteLine(areastring);
//输出areastring的类型
Console.WriteLine(areastring.GetType());
//转换double类型的面积area为整型的面积area1,并输出
int area1 = (int)area;
string area1string = area1.ToString();
Console.WriteLine("{0}", area1string);
//输出area1string的类型
Console.WriteLine(area1string.GetType());
}
按Ctrl+F5组合键运行程序,运行结果如图2-9所示。
图2-9 运行结果
虽然代码最后的输出结果是两个数字,但其类型已经是字符串,这一点可以从控制台输出的System.String加以证明。
代码中的GetType方法用于获取当前变量的类型。在本实例中由于areastring和area1string是字符串类型,所以控制台中输出了System.String,表示这是一个字符串。
C#中还存在一个通用的转换类Convert,可以用于处理类型之间的转换。Convert支持多种类型之间的转换,其支持的转换类型如表2-4所示。
表2-4 Convert转换类型列表
转换类型 |
说 明 |
ToBase64CharArray |
将8位无符号整数数组的子集转换为用Base 64数字编码的Unicode字符数组的等价子集 |
ToBase64String |
将8位无符号整数数组的值转换为它的等效String表示形式(使用Base64数字编码) |
ToBoolean |
将指定的值转换为等效的布尔值 |
ToByte |
将指定的值转换为8位无符号整数 |
ToChar |
将指定的值转换为Unicode字符 |
ToDateTime |
将指定的值转换为DateTime |
ToDecimal |
将指定值转换为Decimal数字 |
ToDouble |
将指定的值转换为双精度浮点数字 |
ToInt16 |
将指定的值转换为16位有符号整数 |
ToInt32 |
将指定的值转换为32位有符号整数 |
ToInt64 |
将指定的值转换为64位有符号整数 |
ToSByte |
将指定的值转换为8位有符号整数 |
ToSingle |
将指定的值转换为单精度浮点数字 |
ToString |
将指定值转换为其等效的String表示形式 |
ToUInt16 |
将指定的值转换为16位无符号整数 |
ToUInt32 |
将指定的值转换为32位无符号整数 |
ToUInt64 |
将指定的值转换为64位无符号整数 |
下面通过一个实例介绍Convert类的使用方法。
创建一个Windows控制台应用程序,演示C#中Convert转换的效果。
(1)启动Visual Studio 2005。
(2)选择“文件”→“新建”→“项目”命令,打开“新建项目”对话框。
(3)在“项目类型”树形列表中选择Visual C#→Windows选项后,在“模板”列表中选择“控制台应用程序”选项。
(4)在“名称”文本框中输入项目的名称,此处为“Convert4”。
(5)单击“确定”按钮,创建项目。
(6)Visual Studio 2005已经默认添加了几个文件,并自动打开其中的一个文件Pro-
gram.cs。修改该文件中的Main方法内容如下:
static void Main(string[] args)
{
//声明两个double类型的变量pi和r,分别表示圆周率和半径
double pi = 3.1415926;
double r = 2;
//计算圆的面积
double area = 2 * pi * r * r;
string areastring = Convert.ToString(area);
//输出圆的面积
Console.WriteLine(areastring);
//输出areastring的类型
Console.WriteLine(areastring.GetType());
//转换double类型的面积area为整型的面积area1,并输出
int area1 = Convert.ToInt32(area);
string area1string = Convert.ToString(area1);
Console.WriteLine("{0}", area1string);
//输出area1string的类型
Console.WriteLine(area1string.GetType());
}
按Ctrl+F5组合键运行程序,运行结果如图2-10所示。
图2-10 运行结果
代码中进行的所有转换都通过Convert中的方法进行,如ToInt32方法和ToString方法。从表2-4中可以看到,Convert中支持很多的类型转换。读者可以熟悉一下,以便在需要的时候加以使用。
常量即不变的量,代码中实际的数字都是常量,如3.141 592 6。在前文的代码中可以完全不使用变量pi而直接使用常量3.141 592 6,则计算圆面积的代码可以用如下的代码段代替:
//声明两个double类型的变量pi和r,分别表示圆周率和半径
double r = 2;
//计算圆的面积
double area = 2 * 3.1415926 * r * r;
//输出圆的面积
Console.WriteLine("{0}", area);
从这段代码中似乎看不到使用常量的优点。使用常量主要有两个目的:首先是为了保证代码的可读性,如使用pi表示圆周率比数字更为清晰易懂;其次使用常量可以避免值的改变。若直接使用数值维护一个高精度的圆周率数值,在输入时很容易产生错误,而使用变量存储pi则有可能使其值发生改变,如不小心被赋值为其他的数值。
声明常量的方法非常简单,以pi的声明为例,如下的代码声明了一个常量pi:
//声明一个常量pi表示圆周率
const double pi = 3.1415926;
在以后的代码中即可使用常量pi表示圆周率,而且可以保证其值的不可更改特性。下面的实例演示了常量的使用方法。
创建一个Windows控制台应用程序,演示C#中常量的使用方法。
(1)启动Visual Studio 2005。
(2)选择“文件”→“新建”→“项目”命令,打开“新建项目”对话框。
(3)在“项目类型”树形列表中选择Visual C#→Windows选项后,在“模板”列表中选择“控制台应用程序”选项。
(4)在“名称”文本框中输入项目的名称,此处为“Convert5”。
(5)单击“确定”按钮,创建项目。
(6)Visual Studio 2005已经默认添加了几个文件,并自动打开其中的一个文件Program.cs。修改该文件中的Main方法内容如下:
static void Main(string[] args)
{
//声明一个double类型的常量pi和一个变量r,分别表示圆周率和半径
const double pi = 3.1415926;
double r = 4;
//计算圆的面积
double area = 2 * pi * r * r;
//输出圆的面积
Console.WriteLine("{0}", area);
//转换double类型的面积area为整型的面积area1,并输出
int area1 = (int)area;
Console.WriteLine("{0}", area1);
}
按Ctrl+F5组合键运行程序,运行结果如图2-11所示。
图2-11 运行结果
代码中定义的常量pi是不允许改变的,当对pi进行赋值操作时,将会产生错误。在代码中加入如下语句:
pi = 3.14;
运行时将会出现如图2-12所示的错误提示。