Nicholas-Chen

导航

C#回忆录二(引用类型和值类型)

在.NET中,所有的类型分为两种,值类型和引用类型。在我们使用一个类型的时候,必须分清它属于哪一

种,否则轻则程序效率降低,重则出现莫名其妙的BUG。
创建过程:
引用类型在托管堆上分配,在你使用new操作符的时候,CLR会在托管堆上为你分配一块内存,返回一个内

存的地址,进行相关的初始化操作,有时会引发垃圾收集操作。值类型直接在栈上面分配,为所有的字段

初始化为0(二进制意义上)。就创建一个对象而言,值类型要更有效率。
行为差别:
在复制的时候,引用类型复制的是地址.即两个变量拥有同样的地址,指向同样的地址空间,对其中一个

的修改会影响到另外一个。而值类型则是字段对字段的赋值,在不同的地址中存储相同的值。复制完了以

后两者就没有关系了。值类型不可以做基类型,不可以拥有虚方法或抽象方法。在作为函数参数传递时,

就值类型而言,在函数内部做的修改不会传出来,因为传进去的是个值的拷贝,除非使用ref或out关键字。引用类型则会传出
使用时机:
如果你只是需要一个包装数据的容器,不需要继承某个特定类,不需要被其他类继承,不需要实现多态。

不需要频繁的作为函数的返回值或参数,可以考虑值类型。

posted on 2006-12-10 11:45  nicholas_chen  阅读(174)  评论(0)    收藏  举报