c# - 如何实例化一个大的不可变类型?

标签 c# immutability instantiation

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

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

最佳答案

你的问题与其说是一个有 40 个参数的构造函数,不如说是一个有 40 个字段的类。

我建议将其分解。是否有任何领域以某种方式相关?如果是这样,将它们分组为一个公共(public)对象(例如 EmailInfo),然后让您的大对象仅引用分组对象。

// Instead of this:
foo.EmailHeader
foo.EmailSubject
foo.Email...

// Do this:
foo.Email.Header
foo.Email.Subject

一旦您的类具有较少的直接属性,创建一个采用这些分组对象的构造函数就不是那么糟糕了。

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

相关文章:

language-agnostic - Allen Holub 写了 "You should never use get/set functions",他是正确的吗?

Python 动态子集的高效查找结构?

python - 扩展 Python 的内置 Str

c# - 为基子类创建了多少个实例和引用?

c# - Azure 中继混合连接 - 如何发送同步请求/响应

c# - 如何将应用程序从 xcode 部署到设备

c# - 如何使用 MySQL 查询将组合框的所有项目发送到 SQL DB

c# - 是否存在类似于 Java 泛型类转换的 C# 泛型类转换?

python - python中的行分析类实例化

python - 在 Python 中,从变量实例化类的正确方法是什么?