C#静态方法中的变量是在开始时初始化还是首先调用方法?

aks*_*a14 1 c# static-methods garbage-collection

在类C#3.5中,我有一些带有一些变量的静态方法.即使我没有初始化类,静态方法也会先被初始化.

那么静态方法中的变量是否也在开始时初始化而不是垃圾收集?

我想知道 - 即使我没有调用方法或者我只调用一次方法并且方法退出,是否会为这样的方法变量分配内存?或者每次调用方法并退出时 - 方法中的变量都是垃圾收集的?

Mar*_*ell 7

首先初始化静态方法

不,静态方法不是"初始化"的; 它们(在标准实现中)在第一次使用时被JIT,但这与内存分配无关.

那么静态方法中的变量是否也在开始时初始化而不是垃圾收集?

方法变量是每次调用(在堆栈上) - 不是全局的; 在输入方法时分配堆栈空间.如果你有引用类型变量,当方法退出时它们将超出范围(假设这些变量没有"捕获"到委托或lambda表达式中,该表达式的寿命比方法长).

只有垃圾收集对象 ; 不是变量.引用类型变量只包含对象的引用.