use*_*238 2 c# specifications initialization declaration
是否有任何关于静态只读参数初始化顺序的规范?
在下面的例子中,可以确定,数组总是以6的长度创建吗?
public class Foo {
private static readonly int MAX_STACKSIZE = 6;
private static readonly int[] m_stack = new int[MAX_STACKSIZE];
}
Run Code Online (Sandbox Code Playgroud)
或者有没有机会在MAX_STACKSIZE 之前初始化m_stack?
@Edit:将const更改为静态只读
编辑:这个答案是在示例代码包含"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;
}
Run Code Online (Sandbox Code Playgroud)
并说...
编译器首先计算AY,然后计算BZ,最后计算AX,按顺序生成值10,11和12.