我认为这样的新C#6.0属性初始化器。
public MyType MyProperty { get; } = new MyType(OtherProperty);
相当于这个
private MyType _myVariable;
public MyType MyProperty { get { return _myVariable ?? _myVariable = new MyType(OtherProperty); } }
(OtherProperty可以作为实例的一部分使用,而不仅限于静态)
但是在上面的第一个中,我得到了“字段初始化器不能引用非静态字段”。我做错了吗,还是属性初始化器的限制如
public readonly MyType MyVariable = new MyType(NeedsStaticReference);
答案 0 :(得分:0)
在第二个示例中,该字段是在首次使用时设置的。
这里的问题是,字段初始化器是在构造函数之前设置的,不能保证设置或构造了另一个属性,或者不能保证顺序发生。
如果要在构造上分配某些东西,则需要在构造函数中完成
字段在紧接构造函数之前初始化。 对象实例被调用。如果构造函数分配a的值 字段,它将覆盖字段声明期间给出的任何值。
字段初始化程序不能引用其他实例字段。
更多信息
可以选择将字段声明为静态。这使得领域 调用者随时可以使用,即使没有该类的实例 存在。有关更多信息,请参见静态类和静态类。 成员。
字段可以声明为只读。只读字段只能是 在初始化期间或在构造函数中分配了一个值。一种 静态''只读字段与常量非常相似,除了 C#编译器无法访问静态只读的值 字段在编译时,仅在运行时
答案 1 :(得分:0)
实际上就是这样:
private readonly MyType _myVariable = new MyType(OtherProperty);
public MyType MyProperty { get { return _myVariable; } }
因此,问题。