• 值类型与引用类型


    在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 测试结果

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

  • 相关阅读:
    c#自动更新+安装程序的制作
    VS2013项目受源代码管理向源代码管理注册此项目时出错
    WinDbg配置和使用基础
    InstallShield Limited Edition for Visual Studio 2013 图文教程(教你如何打包.NET程序)
    PowerDesigner 如何生成数据库更新脚本
    用户故事(User Story)
    Troubleshooting Record and Playback issues in Coded UI Test
    Coded UI
    compare two oracle database schemas
    How to: Use Schema Compare to Compare Different Database Definitions
  • 原文地址:https://www.cnblogs.com/myzw/p/7371788.html
Copyright © 2020-2023  润新知