gpt4 book ai didi

c# - 在 C# 中将结构实例作为类的成员

转载 作者:行者123 更新时间:2023-12-05 05:36:47 25 4
gpt4 key购买 nike

我觉得完全迷失在以下示例代码的逻辑中:

namespace StructInClass
{
internal class Program
{
static void Main(string[] args)
{
SomeClass someClass = new SomeClass();
someClass.DoStaff();
}
}


public class SomeClass
{
private SomeStruct _someStruct;

public SomeClass() =>
_someStruct = new SomeStruct();

public void DoStaff() =>
_someStruct = new SomeStruct(4, 5);
}


public readonly struct SomeStruct
{
public readonly int x;
public readonly int y;

public SomeStruct()
{
this.x = 0;
this.y = 1;
}

public SomeStruct(int x, int y)
{
this.x = x;
this.y = y;
}
}
}

我有几个问题。

  1. 我是否正确理解当我创建 SomeClass 的实例时,它的 SomeStruct 实例将被放置在堆中(同时该结构实例的指针位于堆栈中)?
  2. 当我调用 someClass.DoStaff() 时,SomeStruct 的新实例会在 DoStuff 方法的相应栈帧中创建,对吗?然后指针现在指向 Stack 中的新结构实例?
  3. 声明 SomeStruct 类型的私有(private)字段在性能方面是否有意义?

谷歌搜索给了我模棱两可的答案。

最佳答案

#1。 SomeClass 在堆上,结构在堆内存中内联(如果 SomeStruct 是一个类,那么它将在单独的堆分配中)

#2 不 - 它在堆上

#3 - 是的,它内联在包含类中而不是新的堆分配

关于c# - 在 C# 中将结构实例作为类的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73255147/

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