我对以下示例代码的逻辑感到完全不知所措:
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;
}
}
}
我在这里有几个问题.
- 当我创建一个
SomeClass
的实例时,它的SomeStruct
实例将被放置在Heap中(同时该 struct 实例的指针位于Stack中),这一理解正确吗? - 当我调用
someClass.DoStaff()
的时候,SomeStruct
的新实例是在DoStuff
方法的对应堆栈框架内创建的,对吗?那么指针现在指向Stack中的新 struct 实例吗? - 就性能而言,声明类型为
SomeStruct
的私有字段有意义吗?
谷歌给了我模棱两可的答案.