具體而言,相對於字段初始化(在這種情況下,靜態) - §17.11在ECMA 334:正式定義了部分類的「文本順序」嗎?
如果一個類包含具有初始化任何靜態字段,這些初始值設定在文本順序執行之前立即執行靜態構造函數。
現在,如果我們在單獨的文件中有多個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();
}
}
和b.cs
:
partial class Program
{
private static int Bar = Write("Bar");
}
和:
<Compile Include="a.cs" />
<Compile Include="b.cs" />
那麼這是Foo
然後Bar
;但是,如果是這樣的:
<Compile Include="b.cs" />
<Compile Include="a.cs" />
那麼Bar
然後Foo
。這支持的觀察,但沒有強烈說明。 §8.7.13(部分類型聲明)在組合partial
類時不會對訂單發表任何評論。所以;有沒有更強的我們可以在這裏說,無論是從C#語言規範或從工具文檔?
另外,它的行爲與csc a.cs b.cs
相似,而csc b.cs a.cs
。
很好的問題 –