结构是值类型吗?数组是引用类型吗?
----------------------------------
我在看经典入门这本书,书上说,结构是值类型,我怀疑会不会是印错了,我印象中,结构与类是非常相同的呀。主要区别就是成员一个默认公有,一个默认私有呀。但是值类型与引用类型,那区别就是一天一地了。
所以想确认一下,结构真的是值类型吗?结构也可以有成员函数呀,我无法理解它可以是值类型?另外,书上说,数组是引用类型,我也是不解,如果是引用,那就是在“堆”中分配内存,可是我印象中,数组是不是应该在栈中分配内存呀。数组真的是引用类型吗?

解决方案 »

  1.   

    因为.net 指针非常弱化,所以就有引用类型,和值类型的区别,结构就被赋予了值类型的特点
    c++
     class a{};
     a a1;
     a* a2 - new a;
    这两句倒c#里
     a a1 就没法表示所以用
    struct a{}
     a a1;
    第二句用
     class a{}
     a a2 = new a;
    数组都是Array 的基类 
    Array 是引用类型所以数组是引用类型
      

  2.   

    1. 值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。
    2. 值类型存取速度快,引用类型存取速度慢。
    3. 值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用
    4. 值类型继承自System.ValueType,引用类型继承自System.Object
    5. 栈的内存分配是自动释放;而堆在.NET中会有GC来释放
    C#中基本数据类型是值类型,结构也是值类型。而数组、类、接口、字符串都是引用类型。
     
    值类型:简单类型、枚举类型和结构类型
    简单类型分为:除字符串外的都是简单类型。有:整型(有符号和无符号数)、浮点(float、double)、字符(char)、高精度小数(decimal)和布尔
    引用类型:类(object、class)、接口(interface)、字符串(string)、数组(int[] string[])和委托(delegate)。