类型的转换
C#中类型转换(显隐)的机制分为两种:
一、隐式转换(implicit conversions)
二、显式转换(explict conversions)
隐式转换不需要指明欲转变的类型;
显式转换明确地使用转换运算符(cast)指定要转换成哪一种类型。
C#允许程序员如果对于溢出进行处理
checked:检查是否出现溢出
unchecked:不检查是否出现溢出
例如:
int a; long b=200000000000; try { a=checked((int)b); //也可使用checked语句,而非checked操作符 //checked //{ // (int)b; //这里可以对多个语句进行检查是否溢出 //} } catch(System.OverflowException) { MseeageBox.Show("发生了溢出!"); }
checked和unchecked的使用准则
一、写代码时,将可能发生非预期溢出的代码放到一个checked块中
二,写代码时,将允许发生溢出的代码显式地放到一个unchecked块中。
C#中类型转换(值类型与引用类型)
一、值类型的转换
二、引用类型的转换
开发人员经常需要将一个对象从一种类型转换成他的类型。CLR允许将一个对象强制转换成它的类型或者它的任何基类型。
引用类型转换例子(包含is和as操作符的使用):
class Fruit { } class Apple:Fruit { protect int i=1; } class Conversions { static void Main() { Fruit f=new Apple(); Apple a; //强制转换 ①a=(Apple)f; //在c#语言中进行强制类型转换的另一种方式是使用is操作符, //is操作符检查一个对象是否兼容于指定的类型,并返回一个boolean值。 //is操作符永远不会抛出异常。 ②if(f is Apple) { Apple a=(Apple)f; Console.Write(a.i); } //也可以用as实现 ③a=f as apple if(a!=null) { Console.Write(a.i); } //判断f是否兼容apple,若f兼容而将其类型转换为apple并赋值给a,否则将返回null } }
图片来源:陈广C#视频