预定义类型同时含了预定义的转化行为。比如,int和long之间存在预定义的转化。C#区分这两种类型的转化:隐式转化和显示转化。隐式转化指的是安全的、不需要仔细地指出来的转化。比如int到long的转化就是隐式转化。这种转化总是成功执行,不会造成信息的丢失(译注:此处指的是精度损失)。下面的例子:
1 using System;
2 class Test
3 {
4 static void Main()
5 {
6 int intValue = 123;
7 long longValue = intValue;
8 Console.WriteLine("{0}, {1}", intValue, longValue);
9 }
10 }
2 class Test
3 {
4 static void Main()
5 {
6 int intValue = 123;
7 long longValue = intValue;
8 Console.WriteLine("{0}, {1}", intValue, longValue);
9 }
10 }
隐式地将一个int类型的变量转化成long类型的变量(译注:intValue本身的类型始终是int,不会变)。
相反的,显示转化需要一个转化表达式,如:
1 using System;
2 class Test
3 {
4 static void Main()
5 {
6 long longValue = Int64.MaxValue;
7 int intValue = (int) longValue;
8 Console.WriteLine("(int) {0} = {1}", longValue, intValue);
9 }
10 }
2 class Test
3 {
4 static void Main()
5 {
6 long longValue = Int64.MaxValue;
7 int intValue = (int) longValue;
8 Console.WriteLine("(int) {0} = {1}", longValue, intValue);
9 }
10 }
例子中将long显示转化成int.输出是
(int) 9223372036854775807 = -1
因为溢出了。转化表达式允许执行显示和隐式的转化。