• 值类型、引用类型


    值类型

      值类型(包括所有的数值类型、枚举和结构)都分配在栈上。所以值类型一旦离开其定义的作用域,立即就会从内存中删除

      当一个值类型赋值给另一个值类型的时候,默认情况下完成的是一个成员到另一个成员的复制。

    引用类型

      引用类型分配在托管堆上。其对象一直保留在内存中,直到.NET垃圾回收器将它们销毁。默认情况下,一个引用类型的赋值将new出一个对该堆上同一个对象的新引用(new关键字返回的是一个指向堆上对象的引用,而不是真正的对象本身。这个引用变量保存在栈内,以供程序以后使用)。

    包含引用类型的值类型

      该值类型的复制过程中,值类型依旧完成一个成员到另一成员的复制,而引用类型依旧是new出一个对堆上同一对象的引用的。

      默认情况下,当值类型包含其他引用类型时,赋值将生成一个引用的副本。这样就有两个独立的结构,每一个都包含指向内存中同一个对象的引用(浅复制)。

    按值传递引用类型

      其实该方式也是一种成员到另一成员的复制。只不过其复制的不是成员的值(状态),而是指向调用对象的引用。相当于复制了一个新的实参实例。该实例与实参一样指向堆上同一对象。

    按引用传递引用类型

      该方式传递的是引用类型的本身。通过使用ref关键字,传入的是参数对象本身。

      如果按引用传递引用类型,被调用者可能改变对象的状态数据的值和所引用的对象  

  • 相关阅读:
    Linux线程(一)
    模板(一)
    C++基础(八)
    C++基础(七)
    C++基础(六)
    C++基础(五)
    2.C#基础(二)
    1.C#基础(一)
    2.给出距离1900年1月1日的天数,求日期
    网络协议破解 SMTP
  • 原文地址:https://www.cnblogs.com/76674718/p/1594171.html
Copyright © 2020-2023  润新知