众所周知,
然而让我们考虑这个
struct
是一种值类型,因此在堆栈上分配(除了特定情况下它被装箱到类中)。然而让我们考虑这个
struct
:public struct TestStruct
{
public List<int> items;
}
internal class Program
{
private static void Main(string[] args)
{
TestStruct g;
}
}
我们的TestStruct
g
不是类的成员,而是在Main
函数中声明的“独立”变量。它符合分配在stack
上的变量的要求。
然而,如果我写成:
g.items = new List<int>();
- 我猜
items
在堆上分配,g
也在堆上吗? g
超出范围后,items
会发生什么(即GC
是否必须为items
执行其工作)?- 如果我们有一个实现
IDisposable
的类型的变量,而不是List<int>
,最好的做法是什么?
PS:我知道在这种情况下应该使用class
而不是struct
。我只是被这个特定案例搞糊涂了。
IDisposable
成员的类/结构体也应该是IDisposable
本身 - 这样你就可以在Dispose
中清理可处理的成员。 - Patryk Ćwiek