【发布时间】:2016-10-17 22:16:30
【问题描述】:
为什么会这样:
public int X { get; } = 5
public int Y { get; } = X;
不可能?
因为手动操作:
public TestClass()
{
X = 5;
Y = X;
}
有效,(显然?)这个:
public static int X { get; } = 5;
public static int Y { get; } = X;
有没有办法让第一个示例编译,还是我必须在 ctor 中手动完成?
(我真正的问题要复杂得多,不仅仅是 int,还有实例会被用来创建其他实例,但这个例子更容易讨论)
【问题讨论】:
-
“因为这就是 C# 规范所说的”是不幸的答案“......在变量初始化程序中引用
this是一个编译时错误,因为它是一个编译时错误变量初始化器通过简单名称引用任何实例成员" -
@Damien_The_Unbeliever 谢谢,简单的名字是什么?
-
一个简单的名字基本上是指一个成员,在它之前没有明确地写
this.。例如。您在第一个示例的第二行中使用了一个简单的名称来引用X成员。 -
它是否必须是由字段支持的只读属性?有人可能会争辩说
Y可以定义为只返回X的值。您不一定需要存储空间。
标签: c# constructor properties roslyn c#-6.0