结构数组的元素是引用类型或值类型

本文关键字:类型 引用类型 数组 元素 结构 | 更新日期: 2023-09-27 18:05:49

c#如何处理数组的结构-我需要分配每个数组元素(如果它是一个数组的类对象)?

的例子:

public struct RGBA { public byte red, green, blue, alpha; }
public RGBA [] colorBuffer = new RGBA [1024*1024];

现在是colorBuffer指向RGBA对象的指针数组,我是否必须分配它们,例如:

for (int i = 0; i < colorBuffer.Length; i++)
    colorBuffer [i] = new RGBA ();

或者colorBuffer指向大小为4 MB的内存块,包含1 MB的RGBA结构?

结构数组的元素是引用类型或值类型

colorBuffer变量值将是对数组对象的引用。数组对象本身将是单个对象,大小为4MB(4字节* 1024 * 1024)。数组是引用类型,但是每个元素都是值类型。元素值 RGBA值-它不是指针。

数组将自动初始化为每个元素的default(RGBA),您不需要自己进行初始化。

如果你这样做:

RGBA[] other = colorBuffer;

也就是只是复制了一个引用——这两个变量现在指向同一个数组

结构总是值类型。如果创建一个1024*1024项的数组,则需要的内存为(1024*1024)*(1+1+1+1)+ some_overhead_of_array.

c#中的数组是引用类型,即使它的底层类型是值类型

这里的数组元素是值类型。不需要使用new创建。例如,下面的代码可以很好地编译和执行:

void Main()
{
    var colorBuffer = new RGBA [10];
    for (int i = 0; i < colorBuffer.Length; i++)
    {
        colorBuffer[i].red = (byte)i;
        Console.WriteLine(colorBuffer[i].red);
    }
}
struct RGBA { public byte red, green, blue, alpha; }