gpt4 book ai didi

c# - 盲目地将结构转换为类以隐藏默认构造函数?

转载 作者:太空狗 更新时间:2023-10-29 20:29:35 24 4
gpt4 key购买 nike

我阅读了与该主题相关的所有问题,它们都给出了为什么 struct 上的默认构造函数在 C# 中不可用的原因,但我还没有找到任何人建议一般类(class)面对这种情况时采取的行动。

显而易见的解决方案是简单地将 struct 转换为 class 并处理后果。

是否有其他选项可以将其保留为 struct

我在使用我们的一个内部商务 API 对象时遇到过这种情况。设计者将其从 class 转换为 struct,现在默认构造函数(之前是私有(private)的)使对象处于无效状态。

我认为如果我们要将对象保留为 struct,则应该引入一种检查状态有效性的机制(类似于 IsValid属性(property))。我遇到了很多阻力,并解释了“使用 API 的人不应使用默认构造函数”,这一评论肯定引起了我的注意。 (注意:所讨论的对象是通过静态工厂方法“正确”构造的,所有其他构造函数都是内部。)

在这种情况下,每个人都只是简单地将他们的 struct 转换为 class 吗?

编辑:我希望看到一些关于如何将这种类型的对象保留为 struct 的建议——上面讨论的对象更适合作为 struct > 而不是作为一个

最佳答案

对于 struct,您设计类型时默认构造的实例(字段全为零)是有效状态。如果没有充分的理由,您不会 [不应] 任意使用 struct 而不是 class - 使用不可变引用类型没有错。

我的建议:

  • 确保使用 struct 的原因是有效的([真实的] 分析器揭示了由于大量分配非常轻量级的对象而导致的严重性能问题)。
  • 设计类型,使默认构造的实例有效。
  • 如果类型的设计是由 native /COM 互操作约束决定的,请包装功能并且不要在包装器(私有(private)嵌套类型)之外公开​​ struct。这样您就可以轻松地记录和验证对受限类型要求的正确使用。

关于c# - 盲目地将结构转换为类以隐藏默认构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1429495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com