开发工具与关键技术:Microsoft Visual Studio 2015、.NET
撰写时间:2019年07月15日
预定义引用类型是对象和字符串。类型对象是所有其它类型的最根本的基础类型,而类型字符串要 用来说明 Unicode字符串数据。
预定义数据类型包括有符号和无符号整数类型、浮点数类型、二进制、字符和十进制类型。有符号整数类型有 sbyte、short、int和 long;无符号整数类型有 byte、ushort、uint和 ulong;而浮点类型有 float和 double。
二进制类型用来表示二进制数据:值或者是真或者是假。包含二进制使得编写自说明代码变得容易,并且也帮助消除所有由于我们在应当使用“==”时错误的使用了“=”造成的很普通的代码错误。在 C#中,下面的例子
int i = …;
F(i);
if (i = 0) // Bug: the test should be (i == 0)
G();
是非法的,因为表达式 i=0的类型是 int,而 if声明需要一个二进制类型的表达式。
Char类型用来说明 Unicode字符。某个 char类型变量说明一个单 16位 Unicode字符。 十进制类型适合应用在不能接受舍入误差计算中。通常的例子包括商业计算,例如税收计算和货币转 换。十进制类型提供了 28个有效位。
下面的表中列出了预定义类型,并且指出了如何为每一个类型赋值。
每一个预定义类型都是某个系统提供的类型的简写。例如,关键词 int是一个名为 System.Int32结构的简写。虽然更好的考虑是使用关键词而不是完全的系统类型名称,但是这两个名称可以交换使用。
例如 int的预定义数据类型在某些地方被认为是特别的,但在大多数地方会像其它结构一样被正确对待。操作符重载使得我们可以定义同预定义数据类型行为相同的类型。例如,一个 Digit结构可以支持与整数类型相同的数学操作,并且可以定义 Digit和预定义类型间的转换。
预定义类型可以允许操作符重载它们自己。例如,比较符==和!=对应不同的预定义类型有不同的语意:
• 如果两个 int类型的表达式代表了相同的整数据,它们被认为是相等的。
• 如果两个 object类型的表达式都指向相同的对象或者都是空的,它们被认为是相等的。
• 如果字符串实例有相同的长度并且在每个字符的位置都相同,或者都为空,这两个字符串类型 的表达式就被认为是相等的。
例子:
class Test
{
static void Main()
{
string s = "Test";
string t = string.Copy(s);
Console.WriteLine(s == t);
Console.WriteLine((object)s == (object)t);
}
}
产生下面的输出
True
False
因为第一个比较符比较两个 string类型的表达式,而第二个比较符比较两个 object类型的表达式。