程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Effective C#原則8:確保0對於值類型數據是有效的(2)

Effective C#原則8:確保0對於值類型數據是有效的(2)

編輯:關於C語言

最後創建的ObservationData的成員_magnitude的值是0,這 是合理的。但_whichPlanet卻是無效的。你須要讓0也是有效的(狀態)。如果可 能,選擇把0做為一個最好的默認。Planet枚舉類型沒有一個明確的默認值,無 論用戶是否任意的選擇一些行星,這都不會給人留下好的感覺。當你陷入這樣的 情況時,使用0做為一個非初始化的值,這也是在後面可以更新的:

public enum Planet
{
 None = 0,
 Mercury = 1,
 Venus = 2,
 Earth = 3,
 Mars = 4,
  Jupiter = 5,
 Saturn = 6,
 Neptune = 7,
 Uranus = 8,
 Pluto = 9
}
Planet sphere = new Planet ();

此時,sphere具有一個(默認)值None。為Planet枚舉類型添 加的這個非初始化的默認值,對ObservationData結構。最新創建的 ObservationData對象的目標上具有None和一個數值0。添加一個清晰的構造函數 讓用戶為你的類型的所有字段明白的初始化:

public struct ObservationData
{
 Planet  _whichPlanet; //what am I looking at?
 Double _magnitude; // perceived brightness.
 ObservationData( Planet target,
  Double mag )
 {
  _whichPlanet = target;
  _magnitude = mag;
 }
}

但請記住,默認的構造函數還是可訪問的,而且是結構的部份。 用戶還是可以創建一個系統初始化的變量,而你無法阻止它。

在結束枚 舉類型轉而討論其它類型之前,你須要明白幾個用於標記的特殊枚舉類型規則。 枚舉類型在使用Flags特性時,必須把None的值設置為0:

[Flags]
public enum Styles
{
 None = 0,
 Flat = 1,
 Sunken = 2,
 Raised = 4,
}

很多開發 人員使用枚舉標記和位運算操作AND進行運行,0值會與位標記產生嚴重的問題。 下面這個實驗如果Flat的值是0時,是決不會成功的:

if ( ( flag & Styles.Flat ) != 0 ) // Never true if Flat == 0.
  DoFlatThings( );

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved