zoukankan      html  css  js  c++  java
  • 值类型与引用类型

    在C#中,所有类型都可划分为值类型和引用类型。值类型包括简单类型、结构体类型和枚举类型;引用类型包括自定义类、数组、接口、委托等。

    值类型直接存储其值,变量本身就包含了其实例数据,而引用类型保存的只是实例数据的内存引用。因此,一个值类型变量就永远不会影响到其他的值类型变量,而两个引用类型变量则很有可能指向同一地址,从而发生相互影响。

    从内存分配上来看,值类型通常分配在线程的堆栈上,作用域结束时,所占空间自行释放,效率高,无需进行地址转换,而引用类型通常分配在托管堆上,由GC来控制其回收,需要进行地址转换,效率降低。

    下面通过简单示例来演示值类型与引用类型的区别。

    01 class MyInt                                    //类是引用类型

    02 {

    03 public int I;

    04 }

    05 static void Main(string[] args)

    06 {

    07 int num1 = 123;                            //简单数据类型为值类型

    08 int num2 = num1;                        //将值复制给新变量

    09 num1 = 345;                            //修改num1的值并不影响num2的值

    10 Console.WriteLine("num1={0,-10}num2={1}", num1, num2);

    11 MyInt i1 = new MyInt();                    //类类型为引用类型

    12 i1.I = 123;

    13 MyInt i2 = i1;                            //进行引用复制

    14 i1.I = 345;                                //修改i1的值,将影响i2的值。

    15 Console.WriteLine("i1.I={0,-10}i2.I={1}", i1.I, i2.I);

    16 }

    简单数据类型为值类型,这里用int类型为例,创建两个变量:num1和num2,其中num2的值是通过复制num1的值得到的,之后修改num1的值,因为值类型的变量分别进行存储,改变一个变量的值,并不会影响另一个变量的值,所以修改num1的值并不影响num2的值。

    类类型为引用类型,这里创建了一个简单的自定义类MyInt(本书尚未涉及到面向对象的知识,如果您对类尚不熟悉,需要查阅相关资料进行学习),只包含一个简单的数据成员I。同样定义两个变量,i1和i2,i2是通过复制i1的引用完成的赋值,i1和i2占用同一块内存,任何一个变量值的变化,都会影响到另一个变量。这里修改i1的值,i2的值同时发生改变。

    测试结果如下:

    34 测试结果

    关于值类型与引用类型,这里只能是给您介绍一下简单的概念,让您知道值类型与引用类型的存在,更多详细信息,您可查阅其他书籍或网络搜索相关资料,这里不再累述。

  • 相关阅读:
    element:记一次重置表单引发提交数据为默认数据现象
    三种常用又简单的排序算法
    (07)GitHub从2021.08.13开始使用Token代替账号和密码
    does not implement methodSignatureForSelector:
    自用python库
    2048
    CCSP2021游记
    2021 CCPC 桂林站游记
    2021 ICPC 沈阳站游记
    2021SDU新生赛游记
  • 原文地址:https://www.cnblogs.com/myzw/p/7371788.html
Copyright © 2011-2022 走看看