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

Effective C# 原則 8:確保 0 對實值型別是有效狀態(上)

     編輯:關於C語言

.NET 記憶體初始化規則

CLR 保證:所有記憶體配置時預設為 0(位元全 0)。實值型別 new T()、陣列元素、欄位初始值皆為 0。無法阻止使用者建立「全 0」實例。

列舉型別的陷阱

public enum Planet
{
    Mercury = 1, Venus = 2, Earth = 3, Mars = 4,
    Jupiter = 5, Saturn = 6, Neptune = 7, Uranus = 8, Pluto = 9
}

Planet p = new Planet(); // p = 0 (二進位全 0)
// 0 不在列舉定義值中 → 無效狀態!
// 任何假設「列舉值一定有效」的程式碼將失效

包含實值型別的結構連鎖效應

public struct ObservationData
{
    public Planet Target;    // 預設 0 → 無效 Planet
    public double Magnitude; // 預設 0.0 → 合理
}

var data = new ObservationData(); // Target 為無效值!

解決方案:為列舉加入 0 值

public enum Planet
{
    None = 0,        // 預設值,語意:「未指定/無」
    Mercury = 1,
    Venus = 2,
    // ...
}

Planet p = new Planet(); // p = Planet.None → 有效!

設計原則

永遠為列舉定義值為 0 的成員(通常命名 None、Unknown、Default)。這使「未初始化」成為合法、可檢測的狀態,而非錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved