C# 面试题 目录

C# 中 Dispose 模式的作用和实现

推荐答案

-- -------------------- ---- -------
------ ----- -------- - -----------
-
    ------- ---- --------- - ------

    -- -- ----------- --
    ------ ---- ---------
    -
        --------------
        --------------------------
    -

    -- --------------
    --------- ------- ---- ------------ ----------
    -
        -- ------------
        -
            -- -----------
            -
                -- ------
            -

            -- -------
            --------- - -----
        -
    -

    -- ----
    -----------
    -
        ---------------
    -
-

本题详细解读

Dispose 模式的作用

Dispose 模式主要用于释放非托管资源(如文件句柄、数据库连接等)和托管资源(如集合、对象等)。通过实现 IDisposable 接口,开发者可以显式地释放资源,避免内存泄漏和资源浪费。

Dispose 模式的实现

  1. 实现 IDisposable 接口IDisposable 接口要求实现 Dispose() 方法,该方法用于释放资源。

  2. Dispose(bool disposing) 方法:这是一个受保护的虚方法,允许子类重写。disposing 参数用于区分是显式调用 Dispose() 方法还是通过析构函数调用。

    • disposingtrue 时,表示是显式调用 Dispose() 方法,此时需要释放托管资源和非托管资源。
    • disposingfalse 时,表示是通过析构函数调用,此时只需要释放非托管资源。
  3. GC.SuppressFinalize(this):在 Dispose() 方法中调用 GC.SuppressFinalize(this),可以防止垃圾回收器调用对象的析构函数,因为资源已经被显式释放。

  4. 析构函数:析构函数用于在对象被垃圾回收时释放非托管资源。析构函数调用 Dispose(false),确保只释放非托管资源。

使用示例

using 语句块中,Dispose() 方法会在块结束时自动调用,确保资源被正确释放。

纠错
反馈