C#编程自学之数据类型和变量三
了解了数据类型与变量的基本概念之后,我们来讨论数据类型的转换与装箱与拆箱!装箱和取消装箱使我们能够统一地来考察类型系统,其中任何类型的值最终都可以按对象处理。 int a = 200; //int 范围是 -2147483648~2147483647 long b = a; //long 范围是 -9223372036854775808~9223372036854775807 表示的整数范围更大 并且这个范围包含200 //所以我们认为这两个数据类型转换是默认合法的也称隐式数据类型转换 Console.WriteLine("b = "+b.ToString()); 运行结果当时会输出:“b = 200”这段话啦! 2.强制的数据类型转换 long a = 3333333333; //long 范围是 -9223372036854775808~9223372036854775807 ->3333333333在这个范围中合法 int b = (int)a; //int 范围是 -2147483648~2147483647 -> 3333333333 超出了这个范围 所以导致数据类型溢出 Console.WriteLine("a =" + a.ToString()); Console.WriteLine("b ="+b.ToString());//类型溢出这里会输出一个非常大的负数 输出结果如下: 二、装箱与拆箱 int a = 10; object obj = a; //将值类型转换引用类型,装箱操作 在装箱操作时,运行时会在托管堆上分配一个空间,存放a 中的10,并标志这块空间的装箱类型是int。 2.拆箱 int a = 10; object obj = a; //将值类型转换引用类型 装箱 int b = (int)obj; //将引用类型转换为值类型 拆箱 当拆箱时我们会将推中的10强制类型转换放到栈空间中(图中代表int b)。 3.装箱与拆箱的作用 class MyProgram { //用来打印int类型的值 public static void ShowInt(int a) { Console.WriteLine(" a ="+a.ToString()); } //用来打印float类型的值 public static void ShowFloat(float a) { Console.WriteLine(" a ="+a.ToString()); } //用来打印double类型的值 public static void ShowDouble(double a) { Console.WriteLine(" a ="+a.ToString()); } static void Main(string[] args) { int a = 10; ShowInt(a); float b = 2.2; ShowFloat(b); double c = 2.22; ShowDouble(c); } } 那么我们思考一下,这个时候我需要在支持 string,short,char等等的类型显示的时候,我们是不是需要对每一个类型都定义一个显示的方法? 此时我们在看看引入了装箱与拆箱概念的方法设计: class MyProgram { //将参数类型改为object public static void ShowObject(object obj) { Console.WriteLine("obj ="+obj.ToString()); } static void Main(string[] args) { int a = 10; ShowObject(a); //int a 被装箱 float b = 2.2;//float b 被装箱 ShowObject(b); double c = 2.22;//double c 被装箱 ShowObject(c); } } 这样我们将来不管需要扩展多少数据类型我们这个方法都可以满足。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |