频道栏目
读书频道 > web开发 > .NET > .NET安全揭秘
1.2.1 CTS基本结构
2012-10-24 13:48:34     我来说两句
收藏   我要投稿

本文所属图书 > .NET安全揭秘

全书共分为五个部分。第一部分:.NET安全基础,透彻讲解了.NET体系结构、程序集与反射、应用程序域和CLR寄宿等核心技术,这部分内容是.NET架构的核心,同时也是理解.NET底层安全机制的基础;第二部分:.NET平台安...  立即去当当网订购

CTS不仅定义了所有的数据类型,并提供了面向对象的模型以及各种语言需要遵守的标准。CTS可以分为两个大类:值类型和引用类型,同时这两种类型之间还可以进行强制转换,从值类型到引用类型的转换称为Boxing(装箱),从引用类型到值类型的转换称为UnBoxing(拆箱)。

CTS的基本结构如图1-1所示,它的每一种类型都是对象,并继承自一个基类System.Object。

1. 值类型和引用类型

值类型(Value Type)直接包含它们的数据,值类型的实例分配在堆栈。由图1-1可知,值类型主要包括简单类型、结构体类型和枚举类型等。

引用类型(Reference Type)的实例分配在托管堆(Managed Heap)上,变量保存了实例数据的内存引用。由图1-1可知,引用类型可以是自描述类型、指针类型或接口类型。而自描述类型可以进一步细分成数组和类类型。类的类型则可以是用户定义的类、装箱的值类型和委托。

2. 装箱和拆箱

所谓“装箱”就是将值类型转换为引用类型,所谓“拆箱”就是将被装箱而成的引用类型转换为原来的值类型。代码清单1-1演示了最简单的装箱和拆箱。


 

代码清单1-1装箱和拆箱

using System;
class sample1
{
public static void Main() 
{
int i=10; 
object obj=i;   
Console.WriteLine(i+","+(int)obj); 
}
}

代码清单1-2通过Main()方法的IL代码简要分析了这段代码中的装箱与拆箱。关于IL代码的更多信息将在1.3节详细介绍。

代码清单1-2装箱和拆箱的IL代码

.method public hidebysig static void  Main() cil managed
{
.entrypoint
// Code size       45 (0x2d)
.maxstack  3
.locals init ([0] int32 i,
          [1] object obj)
IL_0000:  nop
IL_0001:  ldc.i4.s   10
IL_0003:  stloc.0
IL_0004:  ldloc.0
IL_0005:  box        [mscorlib]System.Int32
IL_000a:  stloc.1
IL_000b:  ldloc.0
IL_000c:  box        [mscorlib]System.Int32
IL_0011:  ldstr      ","
IL_0016:  ldloc.1
IL_0017:  unbox.any  [mscorlib]System.Int32
IL_001c:  box        [mscorlib]System.Int32
IL_0021:  call       string [mscorlib]System.String::Concat(object,
                                                            object,
                                                            object)
IL_0026:  call       void [mscorlib]System.Console::WriteLine(string)
IL_002b:  nop
IL_002c:  ret
} // end of method sample1::Main  

查看装箱和拆箱次数最简单的方法就是数一数“box”和“unbox”指令出现的次数。可以看出,代码1-2中一共执行了三次装箱和一次拆箱的操作。第一次“object obj=i;”将i装箱;Console.WriteLine方法用的参数是String类型,而String是引用类型,因此,“i+","+(int)obj”中,i要进行一次装箱(转换成String类型),(int)obj将obj对象拆箱成值类型,而根据WriteLine方法,再次将((int)obj)值类型装箱成引用类型。

装箱和拆箱操作是有性能损失的,因此在通常情况下要尽可能避免装箱和拆箱的操作。

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.1 公共语言运行时
下一篇:1.2.2 公共语言规范
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站