具体而言,关于字段初始值设定项(在本例中为静态) - ECMA 334中的第17.11节:
如果一个类包含带有初始化程序的任何静态字段,那么这些初始化程序将在执行静态构造函数之前立即以文本顺序执行.
现在,如果我们partial在单独的文件中有多个类,那么该命令是否在任何地方确定?我的直觉说"没有正式定义,但可能与csproj中包含的顺序有关,或者与csc有关的顺序".它是否正确?
(是的,我意识到最好完全避免歧义 - 可能是通过将所有初始化移动到静态构造函数).
例如,如果我有a.cs:
using System;
partial class Program
{
private static int Foo = Write("Foo");
static int Write(string name)
{
Console.WriteLine(name);
return 0;
}
static void Main()
{
Console.WriteLine("[press any key]");
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
并且b.cs:
partial class Program
{
private static int Bar = Write("Bar");
}
Run Code Online (Sandbox Code Playgroud)
和:
<Compile Include="a.cs" />
<Compile Include="b.cs" />
Run Code Online (Sandbox Code Playgroud)
那么这就是Foo然后Bar; 但是,如果是这样的话:
<Compile Include="b.cs" />
<Compile Include="a.cs" />
Run Code Online (Sandbox Code Playgroud)
那么它是Bar …