如何实现只能设置一次的属性

Max*_*ax 3 c#

我想实现一些只能设置一次的属性.我知道readonly但我希望能够从课外设置值.

情况如下:我有一个类,我用它作为从数据库读取的一些数据的键.此密钥类包含多个属性.

我的第一个想法是创建多个构造函数,我可以像我需要的那样设置属性,但由于"not set"是大多数这些属性的有效状态,我很快就有了一堆构造函数,我认为这不是最好的方法.

我无法使用公共设置器制作属性,因为它们是关键信息,之后更改它们也没有用.所以我需要一种方法从key-class外面设置一次,因为我不想为每种情况制作20个稍微不同的构造函数.

是否有一些像readonly一样容易去做的方法或者我必须自己实现它?

小智 6

正如@Fildor所评论的那样,Builder模式可能适用于此处.您可以根据需要随时在构建器类上设置属性,允许在那里进行多次分配没有任何害处.但是一旦你用它来构建你的类,那么它就被锁定了,然后就不再允许修改了.

class MyClass {
  internal MyClass(MyClassBuilder builder) {
     MyProp1 = builder.MyProp1;
     MyProp2 = builder.MyProp2;
     MyProp3 = builder.MyProp3;
  }
  public string MyProp1 { get; }
  public string MyProp2 { get; }
  public string MyProp3 { get; }
}

class MyClassBuilder {
  public string MyProp1 { get; set; }
  public string MyProp2 { get; set; }
  public string MyProp3 { get; set; }
  public MyClass Build() => new MyClass(this);
}
Run Code Online (Sandbox Code Playgroud)

用法:new MyClassBuilder { MyProp2 = "abc" }.Build().基于相同的一般想法,也可以使用不同的API.