C#装箱和拆箱(值类型和引用类型之间的转换)
面向对象编程中,封箱指把非对象类型的数值或数据,包装成对象类型反之,拆箱指把对象类型拆成非对象的数值或数据。
例子:定义一个Circle 类
1 class Circle 2 { 3 double radius; 4 public Circle(double param) 5 { 6 radius = param; 7 } 8 9 public double Area() 10 { 11 return Math.PI * radius * radius;//圆的面积 12 } 13 }
1 static void Main(string[] args) 2 { 3 Circle c = new Circle(5); 4 Console.WriteLine(c.Area()); 5 6 int i = 10; 7 Object o = i;//装箱操作,将整形变量i赋值给object类型 o 8 Console.WriteLine(o.ToString()); 9 int j = (int)o;//拆箱操作,将Object类型变量o,拆箱赋给整形变量j; 10 Console.WriteLine(j); 11 }
安全的数据类型转换方法:
is运算符,判断变量是否为指定数据类型。
1 o = c; 2 if (o is int) 3 { 4 int k = (int)o; 5 } 6 else if (o is Circle) 7 { 8 Circle c2 = (Circle)o; 9 Console.WriteLine(c2.Area()); 10 }
as运算符。as 运算符类似于强制转换操作。但是,如果无法进行转换,则 as 返回 null
1 int? k = o as int?; //int类型无法存储Null型; 2 if (k != null) 3 { 4 Console.WriteLine(k);//说明转换成功,打印k的值。 5 } 6 else 7 { 8 Circle c2 = o as Circle; 9 if (c2 != null) 10 { 11 Console.WriteLine(c2.Area()); 12 Console.ReadKey(); 13 } 14 }