在C#中是否可以使用具有类型类型的成员变量的Struct?如果是这样,信息存储在哪里,堆栈,堆,或两者?
是的你可以.指向类成员变量的指针与结构的其余值一起存储在堆栈中,类实例的数据存储在堆上.
结构也可以包含类定义作为成员(内部类).
这是一些真正无用的代码,至少编译并运行以显示它是可能的:
using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { MyStr m = new MyStr(); m.Foo(); MyStr.MyStrInner mi = new MyStr.MyStrInner(); mi.Bar(); Console.ReadLine(); } } public class Myclass { public int a; } struct MyStr { Myclass mc; public void Foo() { mc = new Myclass(); mc.a = 1; } public class MyStrInner { string x = "abc"; public string Bar() { return x; } } } }
类内容存储在堆上.
对类的引用(与指针几乎相同)与struct内容一起存储.存储结构内容的位置取决于它是局部变量,方法参数还是类的成员,以及它是否被闭包装箱或捕获.