C#2.0学习随笔。
常量具有如下特征:
● 常量必须在声明时初始化。指定了其值后,就不能再修改了。
● 常量的值必须能在编译时用于计算。因此,不能用从一个变量中提取的值来初始化常量。如果需要这么做,应使用只读字段(详见第3章)。
● 常量总是静态的。但注意,不必(实际上,是不允许)在常量声明中包含修饰符static。
在程序中使用常量至少有3个好处:
● 常量用易于理解的清楚的名称替代了含义不明确的数字或字符串,使程序更易于阅读。
● 常量使程序更易于修改。例如,在C#程序中有一个SalesTax常量,该常量的值为6%。如果以后销售税率发生变化,把新值赋给这个常量,就可以修改所有的税款计算结果,而不必查找整个程序,修改税率为0.06的每个项。
● 常量更容易避免程序出现错误。如果要把另一个值赋给程序中的一个常量,而该常量已经有了一个值,编译器就会报告错误。
C#认可的基本预定义类型并没有内置于语言中,而是内置于.NET Framework中。例如,在C#中声明一个int类型的数据时,声明的实际上是.NET结构System.Int32的一个实例。这听起来似乎很深奥,但其意义深远:这表示在语法上,可以把所有的基本数据类型看作是支持某些方法的类。例如,要把int i转换为string,可以编写下面的代码:string s = i.ToString();
|
名 称 |
CTS 类 型 |
说 明 |
范 围 |
|
sbyte |
System.SByte |
8位有符号的整数 |
–128 到 127 (–27到27–1) |
|
short |
System.Int16 |
16位有符号的整数 |
–32 768 到 32 767 (–215到215–1) |
|
int |
System.Int32 |
32位有符号的整数 |
–2 147 483 648 到 2 147 483 647(–231到231–1) |
|
long |
System.Int64 |
64位有符号的整数 |
–9 223 372 036 854 775 808到9 223 372 036 854 775 807(–263到263–1) |
|
byte |
System.Byte |
8位无符号的整数 |
0到255(0到28–1) |
|
ushort |
System.Uint16 |
16位无符号的整数 |
0到65535(0到216–1) |
|
uint |
System.Uint32 |
32位无符号的整数 |
0到4 294 967 295(0到232–1) |
|
ulong |
System.Uint64 |
64位无符号的整数 |
0到18 446 744 073 709 551 615(0到264–1) |
C#有string关键字,在翻译为.NET类时,它就是System.String。有了它,像字符串连接和字符串复制这样的操作就很简单了:
string str1 = "Hello ";
string str2 = "World";
string str3 = str1 + str2; // string concatenation
尽管这是一个值类型的赋值,但string是一个引用类型。String对象保留在堆上,而不是堆栈上。因此,当把一个字符串变量赋给另一个字符串时,会得到对内存中同一个字符串的两个引用。但是,string与引用类型在常见的操作上有一些区别。例如,修改其中一个字符串,就会创建一个全新的string对象,而另一个字符串没有改变。考虑下面的代码:
using System;
class StringExample
{
public static int Main()
{
string s1 = "a string";
string s2 = s1;
Console.WriteLine("s1 is " + s1);
Console.WriteLine("s2 is " + s2);
s1 = "another string";
Console.WriteLine("s1 is now " + s1);
Console.WriteLine("s2 is now " + s2);
return 0;
}
}
其输出结果为:
s1 is a string
s2 is a string
s1 is now another string
s2 is now a string
换言之,改变s1的值对s2没有影响,这与我们期待的引用类型正好相反。当用值"a string"初始化s1时,就在堆上分配了一个string对象。在初始化s2时,引用也指向这个对象,所以s2的值也是"a string"。但是现在要改变s1的值,而不是替换原来的值时,堆上就会为新值分配一个新对象。s2变量仍指向原来的对象,所以它的值没有改变。这实际上是运算符重载的结果,运算符重载详见第5章。基本上,string类实现为其语义遵循一般的、直观的字符串规则。
浙公网安备 33010602011771号