可以在构造函数之外赋值的只读字段

Man*_*ani 2 c# readonly

有没有办法在类中拥有一个私有只读字段,该字段可以在类中的任何地方赋值,但只能赋值一次??

也就是说,我正在寻找一种私有的只读类型的字段,它只能被赋值一次,但不一定在构造函数中。因此,如果一个值被重新分配给一个字段,那么它会显示编译时错误(我确信这要求太多了)。

如果有任何模式(不是语言功能)可以做同样的工作,那么你也会真的很想知道这一点。

谢谢你的关注。

Joe*_*nez 5

您不会收到编译时错误,但您可以使用属性完成您要查找的内容。在 setter 中,仅当内部 bool/flag 为 false 时才设置值。第一次设置后,将标志设置为 true。如果 setter 被另一段代码再次调用,你可以抛出一个 InvalidOperationException 让他们知道它已经被初始化

private bool fieldAlreadySet = false;
private string field;

public string Field
{
   get {return field;}
   set
   {
       if (fieldAlreadySet) throw new InvalidOperationException("field already set");
       this.field = value;
       fieldAlreadySet = true;
   }
}
Run Code Online (Sandbox Code Playgroud)