最後創建的ObservationData的成員_magnitude的值是0,這 是合理的。但_whichPlanet卻是無效的。你須要讓0也是有效的(狀態)。
恆定類型(immutable types)其實很簡單,就是一但它們被創建,它們(的值) 就是固定的。如果你驗證一些准備用於創建一個對象的參數,你知道它在驗證狀
內部狀 態的改變意味著它很可能違反了對象的不變性,至少是臨時的。當你改變了City 這個字段後,你就使a1處於無效狀態。城市的改變使得它與洲字段及以區碼字段
現在,你就擁有了 一個恆定類型。為了讓它有效的工作,你必須添加一個構造函數來完全初始化 address結構。這個address結構只須要額外的添加一個構造函數
a1的值是兩者之一:它的原始位置 Anytown,或者是後來更新後的位置Ann Arbor。你再不用像前面的例子那樣,為 了修改已經存在的地址而使對象產生臨時
這個數組是一個引用類型。PhoneList內部引用的數組,引用 了分配在對象外的數組存儲空間上。開發人員可以通過另一個引用到這個存儲空 間上的對象來修改你的恆
現在,v是原始數據_myData的一個COPY 。做為一個引用類型,兩個對象都是在內存堆上創建的。你不會因為暴露內部數 據而遇到麻煩。取而代之的是你會在堆上建
如果你不遵守這一原則裡的其它意見,就 按照上面的方法為你所定義的所有類型重寫該方法。它會直接為每個人省下時間 。當你負責任的為Object.ToString(
譯注:上面的做法顯然不合理,要是我的 對象有10個成員,這樣的組合是會讓人瘋掉的。推薦使用正則表達式來完成這樣 的工作,正則表達式在處理文字時的表現還是很出色
使用#if/#endif 塊可以在同樣源碼上生成不同的編譯(結果),大多數debug 和release兩個版本。但它們決不是我們喜歡用的工具。由於#if/#e
這一切在 Debug模式下工作的很正常,但在release下卻輸出的為空行。release模式很樂 意給你輸出一個空行,然而這並不是你所期望的。傻眼了吧,但編
C#是一個強數據類型語言。好的編程實踐意味著當可以避免從一種數據類型 強制轉化為另種數據類型時,我們應該盡我們的所能來避免它。但在某些時候, 運行時類型檢測是
你會同意第一種寫法更簡單更容易讀。它沒有try/catch結構, 所以你可以同時避免(性能)開銷和(多寫)代碼。我們注意到,強制轉換的方法為 了檢測轉換是否把
但下面的轉換只 會有一種行為,而不管st是什麼類型。所以你應該選擇as來轉換對象, 而不是強制類型轉換。實際上,如果這些類型與繼承沒有關系,但是用戶自己定 義
對於常量,C#裡有兩個不同的版本:運行時常量和編譯時常量。因為 他們有不同的表現行為,所以當你使用不當時,將會損傷程序性能或者出現錯誤 。兩害相權取其輕,當我
從MSIL 命令清單的最上面一行你可以看到,StartValue(的值)是動態載入的。但是,在MSIL命令的最後,結束條件是把值10當成硬代碼(hard-co
我們的目標:盡可能編寫出運行效率更高,更健壯,更容易維護的C#代碼。原則一:盡可能的使用屬性(property),而不是數據成員(fIEld)。Always
3、線程同步對 實例的屬性可以進行線程同步,而與訪問者無關。例如:public string Name{ set{ lock(this){