C#如何处理struct数组 - 我是否需要分配每个数组元素(好像它是一个类对象数组)?
示例:
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结构吗?
答案 0 :(得分:8)
colorBuffer
变量值将是数组对象的引用。数组对象本身将是一个对象,大小为4MB(4字节* 1024 * 1024)。数组是引用类型,但每个元素都是值类型。元素值是 RGBA值 - 它不是指针。
对于每个元素,数组将自动初始化为default(RGBA)
,您是否不需要执行自己的初始化。
如果你这样做:
RGBA[] other = colorBuffer;
只是复制引用 - 这两个变量现在引用相同的数组。
答案 1 :(得分:1)
结构总是值类型。如果创建1024 * 1024个项目的数组,则所需内存为(1024 * 1024)*(1 + 1 + 1 + 1)+ some_overhead_of_array。
答案 2 :(得分:1)
C#中的数组是引用类型,即使它的基础类型是值类型。
答案 3 :(得分:1)
这种情况下的数组元素是值类型。它们不需要使用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; }