static ClassName()public ClassName(...)base(...) 或 this(...)。class Base
{
public Base() { Console.WriteLine("Base()"); }
public Base(int x) { Console.WriteLine($"Base({x})"); }
}
class Derived : Base
{
public Derived() { Console.WriteLine("Derived()"); }
public Derived(int x, int y) : base(x) { Console.WriteLine($"Derived({x},{y})"); }
}
// new Derived() → Base() → Derived()
// new Derived(1,2) → Base(1) → Derived(1,2)
規則:基類建構函式先於衍生類;若衍生類未顯式呼叫 base(...),隱式呼叫基類無參建構函式 (基類必須有無參建構函式)。
~ClassName() { ... } (C# 語法糖,編譯為 Finalize() 覆寫)。public class ResourceHolder : IDisposable
{
private IntPtr _nativeHandle; // 非受控資源
private bool _disposed;
// 建構函式取得資源
public ResourceHolder() => _nativeHandle = NativeOpen();
// 公開 Dispose
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this); // 已手動清理,通知 GC 不需呼叫 Finalizer
}
// 核心清理邏輯
protected virtual void Dispose(bool disposing)
{
if (_disposed) return;
if (disposing)
{
// 釋放受控資源 (其他 IDisposable 物件)
}
// 釋放非受控資源
if (_nativeHandle != IntPtr.Zero)
{
NativeClose(_nativeHandle);
_nativeHandle = IntPtr.Zero;
}
_disposed = true;
}
// Finalizer (保障機制)
~ResourceHolder() => Dispose(false);
}
Dispose(true) 中釋放。Dispose(false) 和 Finalizer 中釋放。Dispose(),確保釋放時機確定性。