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

《Effective C# 精髓》讀書筆記:前五大條款精選

     編輯:關於C#

閱讀《Effective C#》前幾個 Item 後,雖無《Effective C++》般震撼,仍收穫頗豐。以下整理前五條核心條款並加入個人心得。

Item 1:永遠用屬性取代可存取的資料成員

屬性是類別的對外介面,成員是內部實現。暴露公共成員會綁死內部結構,未來修改極困難。屬性提供封裝彈性,可隨時加入驗證、延遲載入等邏輯。

Item 2:優先使用 readonly 而非 const

關鍵差異:

  1. const 編譯期替換為常值,跨組件引用時會硬編碼進呼叫端組件;
  2. readonly 執行期評估,靈活性高,效能稍遜;
  3. const 不能用 new 初始化;
  4. 修改 public const 屬介面變更,修改 readonly 屬內部實現變更。

建議:除編譯期確定的真常數(如 Math.PI),其餘改用 readonly。

Item 3:優先使用 is/as 運算子,避免強制轉型

  • is/as 為「動態轉換」,失敗不拋例外,效能優於強制轉型;
  • as 返回 null 而非拋例外,配合 null 檢查最安全;
  • 三者皆不會呼叫自定義轉換運算子;
  • is 可判斷值類型,as 僅限參考類型;
  • 補充:Type.IsAssignableFrom() 支援介面檢查,Type.IsSubclassOf() 僅限類別繼承。

Item 4:使用 Conditional Attribute 取代 #if

#if 可能導致空方法呼叫殘留、程式碼對編譯符號產生依賴。ConditionalAttribute 特性:

  1. 方法永遠編譯進組件;
  2. 條件不滿足時,編譯器移除所有呼叫點;
  3. 修飾方法必須回傳 void,否則程式行為在不同建構下不一致。

Item 5:永遠提供 ToString() 覆寫

實例:將 Customer 列表綁定至 ComboBox。未覆寫 ToString() 時,需手動建立顯示字串清單並綁定,取值時還得解析字串;覆寫後直接綁定物件本身,取值一行搞定:

// 覆寫 ToString()
public override string ToString() => $"{ID} {Name}";

// 綁定
comboBox1.DataSource = customers;

// 取值
Customer desCus = comboBox1.SelectedItem as Customer;

好處:簡化 UI 綁定、移除字串解析邏輯、型別安全。

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