C#终结器中的静态字段

本文关键字:静态 字段 | 更新日期: 2023-09-27 18:19:25

我想创建一个DisposableHelper类,该类记录对象已完成(且未处理)时的信息

public abstract class DisposableBase : IDisposable
{
    static Log log = new Log();
    ...
    ~DisposableBase()
    {
        log.Error("Object not disposed.");
        Dispose(false);
    }
}

log是一个基于log4net的类。我想问一下log对象在终结器期间是否可以访问。我的猜测是,静态字段将在过程结束时被垃圾收集,但我不确定。我错过什么了吗?

C#终结器中的静态字段

我的猜测是静态字段最后会被垃圾收集过程,但我不确定

不完全是。当AppDomain被拆除时,它将有资格进行垃圾收集。对于具有单个AppDomain的应用程序,通常是在进程退出时。

请注意,我说过符合垃圾收集条件的而不是将被垃圾收集。因为这取决于几个原因。

也就是说,您可以访问log字段而不必担心。静态字段在终结器中是可访问的(尽管我会避免它)。