当前位置:  编程技术>.net/c#/asp.net

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

    来源: 互联网  发布时间:2014-10-29

    本文导语:  在刚参加工作面试时,我们经常会遇到有关值类型和引用类型的问题,你回答的怎么样直接影响你在别人心目中的印象,你回答的不好说明你对C#没有深入的了解学习,今天我带大家回顾下C#中的引用类型和值类型。CLR支持两种...

在刚参加工作面试时,我们经常会遇到有关值类型和引用类型的问题,你回答的怎么样直接影响你在别人心目中的印象,你回答的不好说明你对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')
class SomeRef{public Int32 x;}

//值类型(由于使用了‘Struct')
struct SomeVal{public Int32 x;}

static void ValueTypeDemo(){
SomeRef r1 = new SomeRef();   //在堆上分配
SomeVal v1 = new SomeVal(); //在栈上分配
r1.x = 5; //提领指针
v1.x = 5;   //在栈上修改
Console.WriteLine(r1.x);   //显示“5”
Console.WriteLine(v1.x);  //同样显示“5”

SomeRef r2 = r1; //只复制引用(指针)
SomeVal 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”
}

    
 
 

您可能感兴趣的文章:

  • C#难点逐个击破(6):C#数据类型与.net framework数据类型
  • C#枚举类型与结构类型实例解析
  • c# 所有类型都从Object类型派生
  • c# 引用类型和值类型
  • C#引用类型和值类型的介绍与实例
  • C#中值类型与引用类型作为参数传递时的区别
  • c#可空类型的作用说明
  • c# 类型转换
  • C# char类型字符转换大小写的实现代码
  • C#判断数据类型的简单示例代码
  • c# 值类型实例构造器
  • c#值类型与引用类型的区别
  • C#随机生成Unicode类型字符串
  • c#字符串值类型与引用类型比较示例
  • C# 遍历枚举类型的所有元素
  • c# 引用类型构造器
  • c# 类型构造器学习
  • c#判断磁盘驱动器类型的两种方法介绍
  • 深入C#中使用SqlDbType.Xml类型参数的使用详解
  • c# 类型构造器
  • sql使用cast进行数据类型转换示例
  • java协变返回类型使用示例
  • java根据方法名称取得反射方法的参数类型示例
  • c#将list类型转换成DataTable方法示例
  • js整数字符串转换为金额类型数据(示例代码)
  • php检测上传excel文件类型的示例代码
  • c++动态内存空间示例(自定义空间类型大小和空间长度)
  • c#使用反射调用类型成员示例
  • c++显式类型转换示例详解
  • c++隐式类型转换示例分享
  • java文件对话框过滤特定文件类型示例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.xml.ws注释类型webserviceref成员方法: type定义参考
  • java 基本类型或可序列化类型,这里说的可序列化类型是什么意思???具体都有哪些类型??谢谢
  • java命名空间javax.annotation注释类型resource的类成员方法: authenticationtype定义及介绍
  • 求救:关于将类型名称字符串转变成类型相应类型的问题
  • java命名空间javax.annotation注释类型resource的类成员方法: type定义及介绍
  • 请问能否把任何类型数据转换为一种类型,然后从这种类型又转换回去?例如:int>>Object Object>>int
  • java命名空间javax.xml.ws注释类型webserviceref成员方法: value定义参考
  • ado的rs.field("字段名")可以访问任何类型的数据,那吗java里面这种问题如何处理。是不是要先判断类型然后再根据类型来使用相应的getint or getString阿!谢谢了!在线等待!
  • java命名空间javax.annotation注释类型resource的类成员方法: shareable定义及介绍
  • oracle中的空类型与c语言的空类型相匹配吗?
  • java命名空间javax.jws注释类型webparam的类成员方法: mode定义及介绍
  • 如何将String类型转换成Blob类型
  • java命名空间javax.xml.ws注释类型webserviceref成员方法: wsdllocation定义参考
  • 怎样将字符串类型转换成double类型?
  • java命名空间javax.xml.bind.annotation注释类型xmlelementref的类成员方法: type定义及介绍
  • linux修改所有文件类型为文本类型
  • java命名空间javax.xml.bind.annotation注释类型xmlenum的类成员方法: value定义及介绍
  • (在线等)无符号int类型如何向ip类型进行转换呢
  • java命名空间javax.xml.ws注释类型responsewrapper成员方法: targetnamespace定义参考
  • String类型数据与Date类型转换的问题?
  • java命名空间javax.xml.ws注释类型responsewrapper成员方法: classname定义参考
  • 请问在jbuilder中如何将String类型的字符串赋值给StringBuffer类型的变量?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3