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

Effective C# 精華摘錄:五大核心實務原則

     編輯:關於C語言

條款 1:以屬性取代公開欄位

屬性是類別的對外介面,欄位是內部實作。公開欄位會暴露實作細節,導致未來修改困難。屬性提供封裝彈性,可在不破壞二進位相容性下變更內部邏輯。

條款 2:優先使用 readonly 而非 const

特性constreadonly
評估時機編譯期執行期
跨組件行為值內嵌呼叫端組件執行期讀取定義組件
效能極快略慢
彈性僅限編譯期常數可用 new、建構函式指派
版本控管修改值視為介面變更修改值視為內部實作變更

建議: 公開常數用 readonly,私有編譯期常數用 const。

條款 3:偏好 is/as 而非強制轉型

  • as:失敗回傳 null,不拋例外,效能較佳
  • is:型別檢查,可搭配模式比對 if (obj is int i)
  • 強制轉型 (T)obj:失敗拋 InvalidCastException,成本高
  • 三者均不呼叫使用者定義轉換運算子
  • is 可檢查值型別,as 僅限參考型別

輔助工具:Type.IsAssignableFrom()(支援介面)、Type.IsSubclassOf()(僅類別繼承)。

條款 4:使用 ConditionalAttribute 取代 #if

  • 方法永遠編譯進組件,但呼叫端在條件不符時被編譯器移除
  • 避免 #if 造成的空方法呼叫殘留與程式碼相依混亂
  • 修飾方法必須回傳 void,確保程式行為不依賴回傳值

條款 5:永遠覆寫 ToString()

預設 ToString() 僅回傳型別名稱。覆寫後可簡化資料繫結、除錯顯示、日誌記錄:

// 覆寫前:需手動建立顯示字串清單
var cusNameList = new ArrayList();
foreach (Customer c in customers) cusNameList.Add($"{c.ID} {c.Name}");
comboBox1.DataSource = cusNameList;

// 覆寫後:直接繫結物件集合
public override string ToString() => $"{ID} {Name}";
comboBox1.DataSource = customers; // 自動呼叫 ToString()

// 取得選取物件:一行搞定
Customer desCus = comboBox1.SelectedItem as Customer;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved