做法 16
絕不在建構元中呼叫虛擬函式
本章節有提到 Static Code Analyzer 工具,可以利用這些工具避免建構子中呼叫虛擬函式。 工具分別有
- Visual Studio
- JetBrains Rider
- Visual Studio + ReSharper 針對 Unity 的 Static Code Analyzer 只能用這些工具
- JetBrains Rider
- Visual Studio + ReSharper
- Unity + Roslyn
做法 17
`實作標準 Dispose 模式
Unmanaged 型別
sbyte、byte、short、ushort、int、uint、long、ulong、nint、nuint、char、float、double、decimal 或 bool
任何 enum 型別
任何指標型別
Tuple 其成員皆為非受控型別
任何只包含非受控型別欄位的使用者定義結構型別。
Unmanaged 資源
- 是否繼承 IDisposable
- 檢查類別文件
- 分析類別用途和功能
- 看原始碼
- 利用反射,查看有沒有 Finalizer,如 sadehandle
需要實現 IDisposable 的類別
- 有 Unmanaged 資源
- 包含 IDisposable 成員
- 大型物件或耗資源的類別,如大型資料庫、影片、音效等
- 長生命週期物件,如連線功能、控制器等
- 自訂義資源管理類別
不需要實現 IDisposable 的類別
- 純數據類資料
- 無狀態工具類
- 短生命週期的簡單物件
- 不管理任何資源的類別 不是每的類別都蓄要繼承 IDisposable 。僅當你的類別管理 Unmanaged 資源或者包含實現 IDisposable 介面的成員,才考慮繼承 IDisposable。