您的位置:首页 > 编程语言 > C#

C# 引用类型、值类型与拆箱、装箱

2016-03-04 20:59 344 查看
引用类型 任何可被称为‘类’的类型 如:System.Exception, System.IO.FileStream,
[b][b]System.
[/b]String
[/b]

值类型 被称为结构或枚举的类型 如:System.Int32, [b]System.Boolean,
System.Decimal,
[/b]

[b]System.TimeSpan, System.DayOfWeek,
System.
IO.FileAttributes, System.Drawing.FontStyle
[/b]

拆箱 将值类型转化为引用类型

装箱 将引用类型转化为值类型

引用类型、值类型示例

class RefSample
{
public Int32 x;
}

struct ValueSample
{
public Int32 x;
}
static void ValueTypeDemo()
{
RefSample r1 = new RefSample(); //在堆上分配
ValueSample v1 = new ValueSample(); //在栈上分配
r1.x = 5; //提取指针
v1.x = 5; //在栈上修改
Console.WriteLine(r1.x); //显示 5
Console.WriteLine(v1.x); //显示 5

RefSample r2 = r1; //复制引用(指针)
ValueSample v2 = v1; //在栈上分配并复制成员
r1.x = 8; //r1.x r2.x都改变
v1.x = 9; //v1.x改变 v2.x不变
Console.WriteLine(r1.x); //显示 8
Console.WriteLine(r2.x); //显示 8
Console.WriteLine(v1.x); //显示 9
Console.WriteLine(v2.x); //显示 5

}


拆箱装箱说明

1. 如果包含‘对已装箱值类型实例的引用’的变量为null, 抛出NullReferenceException异常

static void Main(string[] args)
{
try
{
Int32 temp = 5;
object o = temp;
o = null;
Int32 y = (Int32)o;
}
catch(NullReferenceException ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
}2. 如果引的对象不是所需值类型的已装箱实例, 抛出InvalidCastException异常
static void Main(string[] args)
{
try
{
Int32 temp = 5;
object o = temp;
Int16 y = (Int16)o;
}
catch(InvalidCastException ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: