如何使用属性初始化另一个属性?

Maf*_*fii 1 c# constructor properties roslyn c#-6.0

为什么是这样:

public int X { get; } = 5
public int Y { get; } = X;
Run Code Online (Sandbox Code Playgroud)

不可能?

因为手动执行:

public TestClass()
{
  X = 5;
  Y = X;
}
Run Code Online (Sandbox Code Playgroud)

工作,(显然?)这样做:

public static int X { get; } = 5;
public static int Y { get; } = X;
Run Code Online (Sandbox Code Playgroud)

有没有办法让第一个例子进行编译,还是我必须在ctor中手动完成?

(我真正的问题要复杂得多,不仅仅是整数,而是用于创建其他实例的实例,但这个例子更容易讨论)

Ren*_*ogt 6

这是不可能的原因是这些初始化是调用构造函数之前完成的.所以它发生在静态上下文中.该对象尚未完全初始化,尚无this参考.所以你不能访问像这样的非静态属性X.

出于同样的原因,它适用于第三个示例中的静态属性.

所以我没有看到解决方法,但在构造函数中进行这种初始化.

  • @PatrickHofman它们在构造函数逻辑中的所有其他内容之前完成.构造对象时要做的第一件事是为对象保留内存,然后完成初始化,然后执行构造函数逻辑. (3认同)