结构的值类型与参考类型

时间:2013-12-01 01:13:56

标签: c# value-type ref reference-type

根据MSDN http://msdn.microsoft.com/en-us/library/t63sy5hs.aspx

值类型:“所有结构,即使其成员是引用类型”

但是我在C#做了一个小实验,我的结构有一个数组类型和一个整数类型。我在main方法中实例化了struct,然后将该struct传递给另一个方法并与之混淆。当我返回main方法时,未反映整数更改,但反映了数组更改。如果我查看各个数据类型(数组是引用类型,整数是值类型),这将是有意义的。

然而,根据MSDN的措辞,结构中的所有数据应该是值类型?我在这里遗漏了什么......结构数据可以是值类型还是引用类型?

1 个答案:

答案 0 :(得分:3)

该陈述是准确的 - struct本身是一种值类型。它作为成员的数组是引用类型,这意味着它是指向地址的指针。因此,如果您更改struct中包含的数组的内容,那么您将直接更改为此数组分配的内存。

如您所述,struct中的整数未被修改。此外,如果您更改了struct中对数组的引用,则不会反映更改。

例如:

struct MyStruct 
{
    public int[] AnArray;
}

int Main()
{
    MyStruct aStruct = new MyStruct();
    aStruct.AnArray = new int[3];
    AlterStruct(aStruct);
    Console.WriteLine(aStruct.AnArray.Length == 3);  // true
}

void AlterStruct(MyStruct aStruct)
{
    aStruct.AnArray = new int[5];
}