gpt4 book ai didi

c# - C# 结构中的引用类型

转载 作者:太空狗 更新时间:2023-10-29 21:22:31 25 4
gpt4 key购买 nike

我正在研究 C# 中的类型值,了解到它们不会像普通引用类型那样在堆上分配。如何分配具有引用类型的结构?

例如

        struct simple{
public Employee e;
public bool topEmployee;
public void printSomething()
{
Console.WriteLine("Progress " + e.GetProgressReport());
Console.WriteLine("TopEmployee " + topEmployee);
}
};

Employee 是一个类。 e 会在初始化时分配到堆中吗?它破坏了拥有结构的意义吗?

最佳答案

类型(值/引用)的“种类”与实例的分配方式关系不大。都是关于生命周期的,分配的方式比“堆”和“栈”多。阅读The Truth About Value Types .

但就目前而言,您的问题是有道理的:结构的成员类型不会影响结构实例的分配方式,因为它们不会影响对象的生命周期。顺便说一句,类(class)也是如此。

成员e 将成为值类型对象的一部分,并分配到它所在的位置。此成员是一个引用,因此e 引用的任何实际Employee 对象都将分配到其他地方1。虽然听起来像一个,但这不是一个特殊的规则;局部变量、类成员和数组项的行为方式相同。它并没有打败值类型,而是保持了值类型和引用类型的优点。值类型实例仍然是独立的值而不是别名,它们仍然具有更简单和更短的生命周期,允许以更少的努力做出更好的分配选择。引用类型实例仍然是共享的并且(可能)长期存在。

1 至少在概念上和当前的实现中;在非常简单的情况下,优化(逃逸分析+分配下沉)可以合并这些分配,但据我所知,没有 CLR 会这样做。

关于c# - C# 结构中的引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22769497/

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