联系我们 - 广告服务
您的当前位置:官网首页 > 资讯 > 时局 >

c#值类型和引用类型使用示例

来源: 编辑: 时间:2019-11-07
导读: 在刚参加工作面试时,我们经常会遇到有关值类型和引用类型的问题,你回答的怎么样直接影响你在别人心目中的印象,你回答的不好说明你对c#没有深入的了解学习,今天我带大......

在刚参加工作面试时,我们经常会遇到有关值凯发网娱乐下载类型和引用类型的问题,你回答的怎么样直接影响你在别人心目中的印象,你回答的不好说明你对c#没有深入的了解学习,今天我带大家回顾下c#中的引用类型和值类型。clr支持两种类型:引用类型和值类型。虽然fcl中大多数类型都是引用类型但程序中用的最多的还是值类型。引用类型总是从托管堆上分配的,c#的new操作会返回对象的内存地址--也就是指向对象的数据的内存地址。设想假设每次使用一个int32值时,都进行一次内存分配,性能会受到多大的影响,为了提升简单、常用的类型的性能,clr提供了名为“值类型”的轻量级类型。值类型的实例一般在线程栈上分配。在代表值类型实例的一个变量中,并不包含一个指向实例的指针。相反,变量中包含了实例本身的字段。值类型的实例不受垃圾回收器的控制。因此,值类型的使用缓解了托管堆中的压力,并减少了一个应用程序在其生命周期需要进行的垃圾回收次数。.net framework sdk文档清楚地指出哪些类型是引用类型,哪些是值类型。任何称为“类”的类型都是引用类型,例如,system.exception 类、system.io.filestream 类以及system.random类都是引用类型。相反文档将所有的值类型称为结构或枚举。例如, system.in32结构、system.boolean结构、system.decimal结构、system.dayofweek枚举以及system.drawing.fontstyle枚举都是值类型。所有的结构都是抽象类型system.valuetype的直接派生类。system.valuetype本身又是system.object派生的,所有的值类型都必须从system.valuetype派生。所有的枚举都是从system.enum抽象类型派生,后者又是从system.valuetype派生的。

以下代码演示了引用类型和值类型。

复制代码 代码如下:
//引用类型
class someref{public int32 x;}

//值类型
struct someval{public int32 x;}

static void valuetypedemo{
someref r1 = new someref;  //在堆上分配
someval v1 = new someval; //在栈上分配
r1.x = 5; //提领指针
v1.x = 5;  //在栈上修改
console.writeline;  //显示“5”
console.writeline;  //同样显示“5”

someref r2 = r1; //只复制引用
someval v2 = v1;  //在栈上分配并复制成员
r1.x = 8;  //r1.x和r2.x都会更改
v1.x = 9; //v1.x会更改,但v2.x不变

console.writeline;  //显示“8”
console.writeline;  //显示“8”
console.writeline;  //显示“9”
console.writeline; //显示“5”
}


























责任编辑:

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

网友评论:

在“\templets\demo\comments.htm”原来的内容全部删除,插入第三方评论代码,如果不需要评论功能,删除comments.html里面的内容即可
推荐使用友言、多说、畅言(需备案后使用)等社会化评论插件

Copyright © 2018 凯发网址娱乐凯发网址娱乐-凯发网娱乐下载-凯发网娱乐官方网站 All Rights Reserved Power by DedeCms
本站所有资讯来源于网络 如有侵权请联系QQ:9490489
Top