【发布时间】:2014-05-13 10:02:16
【问题描述】:
众所周知,struct 是value type,因此分配在堆栈上(例如,它被装箱在类中的特定情况除外)。
但是让我们考虑一下struct:
public struct TestStruct
{
public List<int> items;
}
internal class Program
{
private static void Main(string[] args)
{
TestStruct g;
}
}
我们的TestStruct g 不是类的成员,而是在Main 函数中声明的“独立”变量。它符合stack-allocated 变量的要求。
但是,如果我写:
g.items = new List<int>();
- 我想
items是分配在heap上的,不是吗?g“去”了吗heap也一样? - 当
g超出范围时,items会发生什么(即GC必须为items做它的工作? - 如果不是
List<int>我们有一个类型的变量怎么办 实施IDisposable,最好的做法是什么?
PS:我知道在这种情况下可以(应该?)使用class 而不是struct。我只是对这个具体案例感到困惑。
【问题讨论】:
-
Re 3:我认为在 Microsoft 指南中某处包含
IDisposable成员的类/结构本身也应该是IDisposable- 这样您就可以清理Dispose中的一次性成员。跨度> -
Reference type in struct in C# 也回答了第一个子问题。
标签: c# .net memory-management