gpt4 book ai didi

c# - 为什么将其实现为结构?

转载 作者:IT王子 更新时间:2023-10-29 03:54:50 25 4
gpt4 key购买 nike

在 System.Data.Linq 中,EntitySet<T>使用了几个 ItemList<T>看起来像这样的结构:

 internal struct ItemList<T> where T : class
{
private T[] items;
private int count;
...(methods)...
}

(我花了比发现这个时间更长的时间 - 无法理解为什么 EntitySet<T> 中的实体字段没有抛出空引用异常!)

我的问题是将其实现为类的结构有什么好处?

最佳答案

假设您要存储 ItemList<T>在数组中。

分配值类型数组 ( struct ) 会将数据存储在数组中。另一方面,如果ItemList<T>是引用类型 ( class ) 仅引用 ItemList<T>对象将存储在数组中。实际ItemList<T>对象将分配在堆上。需要额外的间接级别才能达到 ItemList<T>实例,因为它只是一个与长度相结合的数组,所以使用值类型更有效。

Struct vs class

检查 EntitySet<T> 的代码后我可以看到没有涉及数组。但是,EntitySet<T>仍然包含两个 ItemList<T>实例。作为ItemList<T>struct这些实例的存储在 EntitySet<T> 中分配目的。如果 class被用来代替 EntitySet<T>会包含指向 EntitySet<T> 的引用单独分配的对象。

在大多数情况下,使用一种或另一种方法之间的性能差异可能并不明显,但也许开发人员决定将数组和紧密耦合的计数视为单个值,仅仅是因为这似乎是最好的做法.

关于c# - 为什么将其实现为结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6197188/

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