gpt4 book ai didi

c# - 为什么其他不可变类型没有 StringBuilder 的等价物?

转载 作者:行者123 更新时间:2023-11-30 18:51:49 26 4
gpt4 key购买 nike

StringBuilder 的存在纯粹是因为 .NET 中的字符串是不可变的,即传统的字符串连接会使用大量资源(由于要创建大量 String 对象)。

那么,既然 Int32 也是不可变的,为什么不存在用于多次加法的类?

最佳答案

有。 UriBuilder 用于构建 Uri 对象。

Int32Builder 会做什么?通过使用这样的类,对单个整数进行哪些有意义的操作会更方便和/或性能更高?

要使 XXXBuilder 类有意义,必须满足以下条件:

  1. 类或结构是不可变的。
  2. 通过将其替换为基于之前的值(例如 someString += "abc"someDate = someDate.AddDays(1))来更改值必须是相对昂贵(前者比后者更真实)和/或代码相对复杂。
  3. 对此类 XXXBuilder 类的要求非常普遍,因此提供它比让确实需要它的人自己编写代码更有意义。

以上均不适用于 int。它们适用于 stringUri。我不认为引用与值类型特别相关,除了第 2 点适用的情况也将是类几乎肯定是比值类型更好的设计选择的情况。

确实,第 1 点和第 2 点的组合在 .NET 中相对不常见。有些人会争辩说不如它应该的那样普遍(那些赞成大量使用不可变类型的人)。如果我们可以避免第 2 点,那么我们会,不是吗?没有人会认为“我会将其编码为昂贵且笨拙的代码并提供构建器类”。相反,他们有时可能会认为“我深思熟虑的不可变性的缺点是,虽然它给我带来了许多优势,但它使一些操作变得昂贵和笨拙,所以我也会提供一个构建器类”。

关于c# - 为什么其他不可变类型没有 StringBuilder 的等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8849398/

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