Csharp/C#教程:c#值类型和引用类型使用示例分享

在刚参加工作面试时,我们经常会遇到有关值类型和引用类型的问题,你回答的怎么样直接影响你在别人心目中的印象,你回答的不好说明你对C#没有深入的了解学习,今天我带大家回顾下C#中的引用类型和值类型。CLR支持两种类型:引用类型和值类型。虽然FCL中大多数类型都是引用类型但程序中用的最多的还是值类型。引用类型总是从托管堆上分配的,C#的new操作会返回对象的内存地址–也就是指向对象的数据的内存地址。设想假设每次使用一个Int32值时,都进行一次内存分配,性能会受到多大的影响,为了提升简单、常用的类型的性能,CLR提供了名为“值类型”的轻量级类型。值类型的实例一般在线程栈上分配。在代表值类型实例的一个变量中,并不包含一个指向实例的指针。相反,变量中包含了实例本身的字段。值类型的实例不受垃圾回收器的控制。因此,值类型的使用缓解了托管堆中的压力,并减少了一个应用程序在其生命周期需要进行的垃圾回收次数。.netframeworkSDK文档清楚地指出哪些类型是引用类型,哪些是值类型。任何称为“类”的类型都是引用类型,例如,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’)
classSomeRef{publicInt32x;}
//值类型(由于使用了‘Struct’)
structSomeVal{publicInt32x;}
staticvoidValueTypeDemo(){
SomeRefr1=newSomeRef();  //在堆上分配
SomeValv1=newSomeVal();//在栈上分配
r1.x=5;//提领指针
v1.x=5;  //在栈上修改
Console.WriteLine(r1.x);  //显示“5”
Console.WriteLine(v1.x); //同样显示“5”
SomeRefr2=r1;//只复制引用(指针)
SomeValv2=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#中的DateTime是值类型还是引用类型浅析C#中的类型系统(值类型和引用类型)浅谈C#中的值类型和引用类型一看就懂:图解C#中的值类型、引用类型、栈、堆、ref、outC#预定义数据类型之值类型和引用类型介绍C#值类型、引用类型中的Equals和==的区别浅析C#中值类型和引用类型的区别深度分析C#值类型和引用类型的深入理解c#引用类型与值类型的区别详解C#中值类型和引用类型解析

标签: 引用类型 值类型 示例 c#

详解C语言中的ttyname()函数和isatty()函数的用法

c#读写ini配置文件示例

上述就是C#学习教程:c#值类型和引用类型使用示例分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/905441.html

(0)
上一篇 2021年10月22日
下一篇 2021年10月22日

精彩推荐