【发布时间】:2021-10-12 04:57:00
【问题描述】:
我完全被 C# 中关于类型或成员声明顺序的一些积极讨论弄糊涂了。
有一个趋势问题,这会产生什么结果以及为什么?
场景 1:
class Program
{
static readonly int A = Method();
static readonly int B = 42;
static int Method() => B;
static void Main()
{
Console.WriteLine(A); // 0
}
}
如果假设,我更新上面的代码并使其如下所示:
场景 2:
class Program
{
static readonly int B = 42;
static int Method() => B;
static readonly int A = Method();
static void Main()
{
Console.WriteLine(A); // 42
}
}
Scenario 1 的输出是 0 而Scenario 2 的输出是 42。这个输出是 0 还是 42?
我检查了几个答案,但无法理解这些答案是 0 和 42 的方式和原因。
【问题讨论】:
-
你没有更好的事情要做吗? :D 我想说,字段初始化程序按照声明的顺序执行。在您的示例中,混合了字段初始值设定项和静态方法。在场景 1 中,字段 A 将首先使用返回 B 的静态方法的返回值进行初始化,该方法尚未初始化。场景 2 很简单,在字段 A 从返回 B 的静态方法中获取其值之前,字段 B 被初始化。如果有人能给我一个提示,如何在这里换行而不是提交评论,我会很高兴;)
标签: c# .net constructor static main