隐式转换:从类型A到类型B的转换可在所有情况下进行,执行转换的规则非常简单,可以让编译器执行转换.
隐式转换不需要做任何的工作,也不需要另外编写代码.
Var1=var2 如果var2的类型可以隐式的转换成var1的类型,这条赋值语句就涉及隐式转换.这两个变量的类型也可能相同,此时就不需要隐式转换.
Ushort和char的值是可以互换的,因为它们都可以存储0到65535之间的数字,在这两种类型之间可以进行隐式转换,如下代码
ushort destinationVar;
char sourceVar = 'a';
destinationVar = sourceVar;
Console.WriteLine($"sourceVar va1:{sourceVar}");
Console.WriteLine($"destinationVar val:{destinationVar}");
Console.ReadKey();
结果显示:
即使两个变量存储想相同,使用不同的类型解释他们时,方式也是不同的.
简单类型有许多隐式转换,bool和string 没有隐式转换,但数值类型有一些隐式转换.
隐式数值转换表
类型 |
可以安全的转换为 |
int |
long,float,double,decimal |
uint |
long,ulong,float,double,decimal |
long |
float,double,decimal |
ulong |
float,double,decimal |
float |
Double |
char |
Ushort,int,uint,long,ulong,float,double,decimal |
byte |
Short,ushort,int,uint,long,ulong,float,double,decimal |
sbyte |
Short,int,long,float,double,decimal |
short |
Int,long,float,double,decimal |
ushort |
Int,uint,long,ulong,float,double,decimal |
显示转换:从类型A到类型B的转换只能在某些情况下进行,转换规则比较复杂,应进行某种类型的额外处理.
在明确要求编译器把数值从一个数据类型转换为另一种数据类型时,就是在执行显示转换.因此,这需要另外编写代码,代码的格式因转换方法而异.强制转换就是强迫数据从一种类型转换成为另一种类型,其语法比较简单:
(<destinationType>)<sourceVar>
这将把<sourceVar>中的值转换为<destinationType>类型
代码举例:
byte destinationVar;
short sourceVar = 7;
destinationVar = (byte)sourceVar;
Console.WriteLine($"sourceVar val:{sourceVar}");
Console.WriteLine($"destinationVar val:{destinationVar}");
Console.ReadKey();
运行结果如下图:
不能转换的格式之间会溢出报错.