是否有关于初始化静态只读参数的顺序的规范?
在下面的例子中,可以确定,数组总是以6的长度创建吗?
public class Foo {
private static readonly int MAX_STACKSIZE = 6;
private static readonly int[] m_stack = new int[MAX_STACKSIZE];
}
或者是否有机会在 MAX_STACKSIZE之前初始化m_stack?
@Edit:将 const 更改为静态只读
答案 0 :(得分:6)
编辑:这个答案是在示例代码包含“const”而不是“static readonly”时编写的。它对于当前版本的问题无效 - 我可能会在某个时候写下另一个答案,但我现在没有时间。
无论如何,这都不是有效的C#,因为你不能将const int[]
设置为除null以外的任何其他内容。
但是,在更一般的情况下,C#规范的第10.4节适用:
只要依赖关系不是循环性的,就允许常量依赖于同一程序中的其他常量。编译器会自动安排以适当的顺序评估常量声明。
然后给出以下示例:
class A
{
public const int X = B.Z + 1;
public const int Y = 10;
}
class B
{
public const int Z = A.Y + 1;
}
并说......
编译器首先计算A.Y,然后计算B.Z,最后计算A.X,按顺序生成值10,11和12。