根据MSDN http://msdn.microsoft.com/en-us/library/t63sy5hs.aspx
值类型:“所有结构,即使其成员是引用类型”
但是我在C#做了一个小实验,我的结构有一个数组类型和一个整数类型。我在main方法中实例化了struct,然后将该struct传递给另一个方法并与之混淆。当我返回main方法时,未反映整数更改,但反映了数组更改。如果我查看各个数据类型(数组是引用类型,整数是值类型),这将是有意义的。
然而,根据MSDN的措辞,结构中的所有数据应该是值类型?我在这里遗漏了什么......结构数据可以是值类型还是引用类型?
答案 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];
}