【问题标题】:Value Type vs Ref Type for structures结构的值类型与参考类型
【发布时间】:2013-12-01 01:13:55
【问题描述】:

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

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

但是,我在 C# 中做了一个小实验,其中我有一个具有数组类型和整数类型的结构。我在 main 方法中实例化了该结构,然后将该结构传递给另一个方法并弄乱了它。当我回到main方法时,没有反映整数变化,但反映了数组变化。如果我正在查看单个数据类型(数组是引用类型,整数是值类型),这是有道理的。

但是根据 MSDN 的措辞,结构的所有数据都应该是值类型?我在这里遗漏了什么……结构数据可以同时是值类型和引用类型吗?

【问题讨论】:

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


【解决方案1】:

声明是准确的 - 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];
}

【讨论】:

  • 谢谢,有道理!
猜你喜欢
  • 2013-06-01
  • 1970-01-01
  • 2013-12-11
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
  • 2021-10-10
相关资源
最近更新 更多