我有一个包含大约 40 个属性(所有值类型)的类型,代表我的业务的一种交易类型。此类的一个实例对应于我数据库中的一行。我想保持我的类不可变,因为它只会用于读取操作,但我不确定如何在初始化期间设置 40 个属性。

通常我对不可变类型使用构造函数初始化,但我想避免编写带有 40 个参数的构造函数。我的属性的 setter 目前是私有(private)的,尽管我愿意有充分的理由进行更改。是否有处理这种情况的通用方法或解决问题的更好方法?

最佳答案

快点。您提到对象上的 setter 是私有(private)的。如果是这种情况,那么您的对象不是不可变的(否则 setter 将不存在)。充其量您的对象是只读的。

对于真正的不可变对象(immutable对象),别无选择,只能让构造函数接收初始化对象所需的所有值。减少构造函数中参数数量的最佳方法是将值分组到更大的对象中,然后将这些对象传递给构造函数。虽然我不会这样做,除非这些值在逻辑上是相关的。

如果您的不可变类型确实需要 40 个值并且它们不相关,那么最好的方法是使用具有 40 个值的构造函数。那个或进一步分解大的不可变对象(immutable对象)。

关于c# - 如何实例化一个大的不可变类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3113690/

10-12 04:48