版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/suzan_bingtong/article/details/81610044
隐式转换
基本概念
当两个不同类型的操作数进行运算时,编译器会试图对其进行自动类型转换,使两者变为同一类型。不同的数据类型具有不同的肤质空间,如果试图将一个需要较大赋值为空间的数据转换为赋值空间较小的数据,就会出现错误。
隐式转换一般在不同类型的数据进行混合运算时发生,由c#语言编译器自动完成。
隐式转换遵循以下规则
- 如果参与运算的数据类型不相同,则先转换成同一类型,然后进行运算。
- 转换时按数据长度增加的方向进行,以保证精度不降低,如Int型和Long型数据进行运算时,先把int型数据转换成long型后,再进行运算。
- 所有浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再进行运算。
- byte型和short型数据参与运算时,必须先转换成int型。
- char型可以隐式转化为ushort.、int、uint、long、ulong、float、double或decinmal型,但是不存在从其他类型到char型的隐式转换。
static void Main(string[] args)
{
double m;
int n = 10;
m = n;
Console.WriteLine("m="+n);
Console.ReadKey();
}
上述代码中定义了一个double型(高类型)变量m和int型(低类型)变量n。如下代码将赋值给m,由于类型不同,系统自动实现了隐式转换。运行结果如果:
m=10
显示转换
基本概念
在c#中,为了避免隐式转换可能带来的错误,需要使用强制转换来执行显示转换,强制类型转换的一般形式如下:
//(float) a 把a转换为float 类型
//(int)(x+y) 把x+y转换为int类型
c#允许用System.Convert类提供的类型转换方法来转换数据类型,常用的转换方法有ToBoolean、ToByte、ToChar、ToInt32、ToSingle、ToString等。
举例
static void Main(string[] args)
{
double m = 5;
int n;
n = convert.ToInt32(m); //使用函数进行类型转换
Console.WriteLine("n="+n);
Console.ReadKey();
}
运行结果如下:
n = 5
两种类型之间没有任何关系的数据类型是不能相互转换的。