具体而言,关于字段初始值设定项(在本例中为静态) - 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那么Foo.这支持观察,但没有强烈说明.§8.7.13(部分类型声明)在组合partial类时不对顺序发表评论.所以; 我们可以在这里说些什么,无论是来自C#语言规范还是来自工具文档?
此外,它与csc a.cs b.csvs的行为相似csc b.cs a.cs.
Ani*_*Ani 20
这是C#规范中的另一个片段,与您的片段一起使用,似乎解决了这是未定义的行为:
10.2.6会员
[...]类型中成员的排序对C#代码来说很少有意义,但在与其他语言和环境交互时可能很重要.在这些情况下,未定义在多个部分中声明的类型内的成员的顺序.
公平地说,它确实说很少有意义,而不是无关紧要:).
| 归档时间: |
|
| 查看次数: |
1281 次 |
| 最近记录: |