C#中强制类型转换和隐式转换有什么不同?各是在什么情况下用
3个回答
展开全部
强制类型转换是说,在编程的时候必须手动进行转换,因为这种转换可能会发生溢出、转换不成功等问题。例如,int类型的值k要转换为byte,就必须进行强制类型转换:
int k;
byte s = (byte)k; //转换可能不成功,例如当k=1024的时候数据溢出而导致转换失败!
object s;
...//一些代码;
string str = (string)s; //转换可能不成功,因为 s 可能根本就不是 string 类型的对象!
注意,强制类型转换是有可能出现异常的,因此,除非能够确定强制转换一定是成功的,否则务必用try...catch捕获异常!这也是为什么编译器要求要进行强制类型转换的原因:因为转换时可能出现异常,这些异常应当由编程人员处理,而不是编译器代为处理。
隐式转换是由编译器自动进行类型转换,因为这样是不会出现溢出、转换失败的问题的,这样会方便些。例如,从范围较小的数值到范围较大的数值、从派生类到基类的转换都是隐式类型转换:
int k = int.MaxValue;
long l = k; //这是可以通过编译的,因为永远不会溢出。
string s = "Hello C#";
object obj = s; //这也是可以的,因为 string 类型从 object 类派生。
int k;
byte s = (byte)k; //转换可能不成功,例如当k=1024的时候数据溢出而导致转换失败!
object s;
...//一些代码;
string str = (string)s; //转换可能不成功,因为 s 可能根本就不是 string 类型的对象!
注意,强制类型转换是有可能出现异常的,因此,除非能够确定强制转换一定是成功的,否则务必用try...catch捕获异常!这也是为什么编译器要求要进行强制类型转换的原因:因为转换时可能出现异常,这些异常应当由编程人员处理,而不是编译器代为处理。
隐式转换是由编译器自动进行类型转换,因为这样是不会出现溢出、转换失败的问题的,这样会方便些。例如,从范围较小的数值到范围较大的数值、从派生类到基类的转换都是隐式类型转换:
int k = int.MaxValue;
long l = k; //这是可以通过编译的,因为永远不会溢出。
string s = "Hello C#";
object obj = s; //这也是可以的,因为 string 类型从 object 类派生。
展开全部
强制类型转换就是在你知道这种情况的转换下,会出现数据溢出,或丢失数据的时候使用的。
隐式转换就是自动的帮你转换的,比如说,int类型的转换为long类型的,这种转换不会出现溢出啊。不会出现数据丢失的时候,就可以直接的隐式转换的。
隐式转换就是自动的帮你转换的,比如说,int类型的转换为long类型的,这种转换不会出现溢出啊。不会出现数据丢失的时候,就可以直接的隐式转换的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询