gpt4 book ai didi

.net - .Net 中的 struct String 会有好处吗?

转载 作者:行者123 更新时间:2023-12-04 22:25:12 26 4
gpt4 key购买 nike

注意:这是一个假设性的讨论。我实际上并不想实现一个 struct String。

.Net String 类可以是值类型(结构),因为它是不可变的并且成员很少。但 String 不是值类型。可能是因为 String 是在引入可空类型之前设计的,或者可能是为了匹配 Java 字符串的行为。

将 String 更改为值类型或实现 String 的值类型变体是否有益?它将删除一个间接级别并匹配常见的不可为空的情况。

最佳答案

简答

字符串必须具有引用类型成员(例如 char[] )才能具有可变大小。因此,任何 struct String 类型实际上只是伪装成值类型的引用类型。

中等答案

我更深入地讨论了这个 here 。但我想法的基本要点是:是的,你可以有一个字符串“值类型”,大概是这样的:

public struct String
{
char[] m_characters;

public String(IEnumerable<char> characters)
{
m_characters = characters.ToArray();
}

public char this[int index]
{
get { return m_characters[index]; }
}

// All those other string functions... IndexOf, Substring, etc.
}

……但真的没有意义。上面的内容本质上只是一个引用类型(围绕 char[] 的包装器),它位于一个看起来很像值类型的 shell 中。此外,当您以这种方式设计类型时,您会遇到使用值类型(例如,可能进行装箱)而没有任何好处的缺点(上述 String 类型的实例与引用类型具有相同的内存分配要求)包装,所以从 GC 的角度来看,它也不会给你带来任何好处)。

关于.net - .Net 中的 struct String 会有好处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4098692/

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