澳门在线威尼斯官方 > 澳门在线威尼斯官方 > 值类型和援用类型,数据类型及差别

原标题:值类型和援用类型,数据类型及差别

浏览次数:108 时间:2019-09-15

    1. 值类型

为什么要设计值类型:

    1. 基本类型:值类型,引用类型
      1. 相同点:  
        1. 引用类型可以实现接口,值类型当中的结构体也可以实现接口;
        2. 引用类型和值类型都继承自System.Object类。

3.     值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用

      图片 1

     为什么会发生装箱:

             5. 栈的内存分配是自动释放;而堆在.NET中会有GC来释放。

个完全相同的值;而把一个引用变量赋给另一个引用变量,则会在堆栈中保存对同一个堆位置的两个引用

    2. 引用类型占用内存不固定, 根据它所创建的对象对应的数据大小不同而不同。

6.      值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。

             3.值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用。

         因为值类型与引用类型在CLR中的内存管理方式不同,所以当值类型在程序中需要向引用类型转化的时候就会发生装箱。也就是当值类型的实例对象需要在一个程序作用域的场景下,转化成为不从System.ValueType继承的另外一个类型的对象时,装箱就会发生。

 

  1. 值类型不需要从托管堆分配
  2. 引用类型产生的实例对象在托管堆上都会有一些额外的成员,这些成员必须初始化
  3. 值类型不使用GC垃圾回收控制,作用域结束后,会自行释放。

二. 基本类型主要差异

4.     值类型继承自System.ValueType,引用类型继承自System.Object

            Console.WriteLine("bool size:{0}", sizeof(bool));
            Console.WriteLine("byte size:{0}", sizeof(byte));
            Console.WriteLine("char size:{0}", sizeof(char));
            Console.WriteLine("decimal size:{0}", sizeof(decimal));
            Console.WriteLine("double size:{0}", sizeof(double));
            Console.WriteLine("float size:{0}", sizeof(float));
            Console.WriteLine("int size:{0}", sizeof(int));
            Console.WriteLine("long size:{0}", sizeof(long));
            Console.WriteLine("sbyte size:{0}", sizeof(sbyte));
            Console.WriteLine("short size:{0}", sizeof(short));
            Console.WriteLine("uint size:{0}", sizeof(uint));
            Console.WriteLine("ulong size:{0}", sizeof(ulong));
            Console.WriteLine("ushort size:{0}", sizeof(ushort));
            Console.WriteLine("--------------------------------------");   

占用四个字节)。由数据存储的位置可以得知,当把一个值变量赋给另一个值变量时,会在堆栈中保存两

二. 类型之占用内存

因此对一个变量的操作不会影响到其它变量;对于引用类型的变量,对一个变量的数据进行操作就是对这

          2.不同点

引用类型包括:数组,用户定义的类、接口、委托,object,字符串

             2.值类型存取速度快,引用类型存取速度慢。

          因为设计值类型的本意是为了提升效率。但是当装箱发生时,值类型会转化成为引用类型,这个时候,效率没有得到任何提高。反而因为装箱,拆箱有可能重复多次的发生,反而让效率更受影响。

        · 1字节=8位 与值类型描述一致;

1.    值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的
地址。

一.数据类型

值类型和引用类型的区别:

             4.值类型继承自System.ValueType,引用类型继承自System.Object。

数据则保存在堆中。注意,堆和堆栈是两个不同的概念,在内存中的存储位置也不相同,堆一般用于存储

本文由澳门在线威尼斯官方发布于澳门在线威尼斯官方,转载请注明出处:值类型和援用类型,数据类型及差别

关键词:

上一篇:没有了

下一篇:没有了