我阅读了与该主题相关的所有问题,它们都给出了为什么struct
在 C# 中没有默认构造函数的原因,但我还没有找到任何人在遇到这种情况时提出一般的行动方案。
显而易见的解决方案是简单地将 a 转换struct
为 aclass
并处理后果。
还有其他选择可以保留它struct
吗?
我在使用我们的一个内部商务 API 对象时遇到了这种情况。设计者将其从 a 转换class
为 a struct
,现在默认构造函数(之前是私有的)使对象处于无效状态。
我认为如果我们要将对象保留为 a struct
,则应该引入一种检查状态有效性的机制(类似于IsValid
属性)。我遇到了很多阻力,并且对“任何使用 API 的人都不应使用默认构造函数”的解释,无疑让我大吃一惊。(注意:有问题的对象是通过静态工厂方法“正确”构造的,所有其他构造函数都是internal
。)
是不是大家都在这种情况下不假思索地把struct
s转成es?class
编辑:我想看到一些关于如何将这种类型的对象保留为 a 的建议struct
——上面有问题的对象更适合作为 astruct
而不是作为 a class
。