装箱(把值类型转换成引用类型)与拆箱(把引用类型转换成值类型)
装箱是把值从栈中拿出来放在堆上,再把值对应的索引号放入栈中
拆箱是从栈中申请内存然后把堆中的值放如到申请的栈空间中。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//隐式转换
int i = 1;
long l = i;
C1 c1= new C2();//小范围向大范围转换
//显式转换---大范围向小的范围转换,或者说基类向子类
double d = 10.05;
int iFromD = (int)d;
//无法进行转换,使用处理异常:这个例子只是为了说明基类向子类转换的实例
C1 c11 = new C1();
try
{
C2 c2 = (C2)c11;
}
catch(Exception e) {
Console.WriteLine(e.Message);
}
//整型转换成string类型
string sFromI =i.ToString();
//string转换成整数类型:方法一
int iFromS = Convert.ToInt32("100");
//方法二
int iFromS2 = Int32.Parse("101");
//方法三
int iFromS3;
bool succeed = Int32.TryParse("jikexueyuan",out iFromS3);
Console.WriteLine(iFromS);
Console.WriteLine(iFromS2);
Console.WriteLine(iFromS3);
//装箱(把值类型转换成引用类型)与拆箱(把引用类型转换成值类型)
int iToBoxing = 100;
object iBoxed = iToBoxing;
//拆箱--
int iUnboxing = (int)iBoxed;
object nullObject = 5;//为空则出错即5不能为null
int isNull = (int)nullObject;
//可为空的int
int? iNullable = 100;//相当于
System.Nullable<int> iNullable2=100;
Console.WriteLine(iNullable.Value);
//报错
//int? iNullable3 = null;
//Console.WriteLine(iNullable3.Value);
//正确方法为以下
int? iNullable3 = null;
Console.WriteLine(iNullable3.HasValue);
//或者直接用下一句
Console.WriteLine(iNullable3.GetValueOrDefault());
//下面是双问号的作用:如果iNullable3为空的话,被复为后面的值。不为空的话
//显示前面的值
int iii = iNullable3 ?? 500;
Console.WriteLine(iii);
int iii1 = iNullable ?? 500;
Console.WriteLine(iii1);
Console.ReadLine();
}
}
class C1 { }
class C2 : C1 { }
}