首页 > 解决方案 > 如何实现只能设置一次的属性

问题描述

我想实现一些只能设置一次的属性。我知道只读,但我希望能够从类外设置值。

情况如下:我有一个类,我用它作为我从数据库中读取的一些数据的键。这个键类包含几个属性。

我的第一个想法是创建多个构造函数,我可以在其中设置我需要的属性,但由于“未设置”是大多数这些属性的有效状态,我很快就有了一堆构造函数,我认为这不是最好的方法。

我不能使用公共设置器创建属性,因为它们是关键信息,之后更改它们是没有好处的。所以我需要一种从键类外部设置它们一次的方法,因为我不想为每种情况制作 20 个稍微不同的构造函数。

是否有一些类似只读的易于使用的方法来做到这一点,还是我必须自己实现它?

标签: c#

解决方案


正如@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);
}

用法:new MyClassBuilder { MyProp2 = "abc" }.Build()。基于相同的总体思想,不同的 API 也是可能的。


推荐阅读