首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

.NET 開發人員必備類別庫精選 (二):GC、Guid、ICloneable、IDisposable 深度解析

     編輯:關於.NET

承接上集,本文深入解析四個高頻使用的核心類型/介面,掌握其正確用法與常見陷阱,寫出更健壯的 .NET 程式碼。

GC 類別:與垃圾收集器對話

僅在使用非受控資源時需主動介入。垃圾回收三階段:標記 → 完成器佇列 → 釋放記憶體。常用靜態方法:

  • GC.Collect():強制立即回收所有代 (效能敏感區慎用)。
  • GC.WaitForPendingFinalizers():阻塞直到完成器執行完畢。
  • GC.SuppressFinalize(this):在 Dispose() 中呼叫,告知 GC 無需再呼叫完成器。

Guid 結構:全域唯一識別碼

128 位元整數,幾乎不可能重複。常見用途:資料庫主鍵、分散式系統識別碼、暫存檔命名。效能考量:Guid.NewGuid() 比 int 主鍵大 4 倍,索引分裂較頻繁,大量資料場景需權衡。

ICloneable 介面:淺複製 vs 深複製

單一方法 object Clone(),語意由實作者定義。範例實作深複製:

public class UserInfo : ICloneable
{
    public string UserName { get; set; }
    public string Password { get; set; }

    public object Clone()
    {
        return new UserInfo { UserName = this.UserName, Password = this.Password };
    }
}

// 使用示範
UserInfo u1 = new UserInfo("Tom", "123");
UserInfo u2 = u1;           // 參考複製
UserInfo u3 = u1.Clone() as UserInfo; // 深複製
u2.UserName = "Tom_Ref";
u3.UserName = "Tom_Clone";
// u1.UserName 仍為 "Tom"

IDisposable 介面:確定性資源釋放模式

標準 Dispose(bool disposing) 模式同時處理受控與非受控資源:

public class BaseResource : IDisposable
{
    private IntPtr handle;      // 非受控
    private Component comp;     // 受控
    private bool disposed;

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (!disposed)
        {
            if (disposing) comp.Dispose(); // 釋放受控
            CloseHandle(handle);           // 釋放非受控
            handle = IntPtr.Zero;
            disposed = true;
        }
    }

    ~BaseResource() { Dispose(false); } // 完成器備援
}

關鍵原則:

  1. Dispose 可重複呼叫且不拋出例外。
  2. 繼承類別 override Dispose(bool) 而非重寫 Dispose()。
  3. 已釋放物件再呼叫方法應拋出 ObjectDisposedException。
  4. 非受控資源 務必 在完成器與 Dispose(false) 中釋放。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved