Effective C# Item10:理解GetHashCode()方法的缺陷

    GetHashCode()方法的用途:為一個基於散列的集合定義鍵的散列值,典型的散列集合包括HashTable和Dictionary。如果我們定義的類型在散列集中不會被用作鍵的話,那麼不用關心它的GetHashCode()方法是否高效和正確。   

Effective C# Item41 : DataSet優於自訂結構

    大家認為DataSet不好的兩個理由:1. 使用XML序列化機制的DataSet與非.NET代碼之間的互動不是很好,使用DataSet的Web Services API很難與不支援.NET架構的系統互動;2. DataSet是一個非常通用的容器,程式員可能會犧牲某些.NET架構的型別安全而誤用DataSet。   

Effective C# Item11:優先採用foreach迴圈語句

    C#針對迴圈提供了一種新的形式:foreach,它和.NET架構中的集合介面密切聯絡。我們在程式中,應該優先使用foreach進行迴圈。    來看下面的程式碼片段代碼Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 int [] foo = new int[100]; 2 3 // Loop 1: 4 foreach ( int i

More Effective C# Item9 :使用泛型元組代替out和ref參數

    如果我們在進行設計時,需要針對一個方法返回多個結果,通常情況下,我們會使用ref或者out參數。同時,我們還是使用泛型元組來返回多個不相關的值。    我們來看下面的代碼,首先定義一個具有繼承關係的結構。代碼Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 publicclass Person 2 { 3

Effective C# Item27:避免ICloneable介面

    一般情況下,我們不建議針對類型實現ICloneable介面。因為如果一個類型支援ICloneable介面,那麼該類型的所有衍生類別都必須實現它,而且類型中所有成員類型也都要實現ICloneable介面,或者有其他建立複製對象的機制,當我們設計的類型包含交織成網狀的對象時,支援深複製會變得比較複雜。   

Effective C# Item40 : 根據需要選用恰當的集合

    本條只針對.NET 1.x,因此不會涉及到泛型,討論的是不全面的。    

Effective C# Item14:利用構造器鏈

    編寫建構函式通常是一件重複性的勞動,我們經常需要在不同聲明形式的建構函式中,對同一個成員變數進行同樣的初始化操作,為了完成這個任務,通常有以下三種方式。對代碼採用“複製/粘貼”的方式,在寫好一個建構函式後,將代碼粘貼到其他建構函式中。採用輔助函數的方式,將共通的邏輯放置到一個單獨的方法中,然後在每個建構函式中調用這個方法。採用構造器鏈的方式,在一個建構函式中,使用另外的建構函式。   

Effective C# Item43 : 避免過度使用反射

    反射是一個強大的工具,它使得我們可以編寫更為動態軟體,通過反射,一個應用程式可以通過添加一些“在應用程式部署時還不存在的”新組件,來完成新功能的升級,這是反射最大的作用。   

More Effective C# Item7 : 不要為基類或者介面建立泛型的特殊實現

    引入泛型方法將讓編譯器對重載的解析變得非常複雜,每個泛型方法的型別參數都可以任意轉換。如果稍有疏忽,程式的行為都將變得極其古怪,在建立泛型類或者方法時,必須保證讓使用者能夠儘可能的理解你的設計意圖,安全的使用你的代碼。    我們來查看以下的代碼,首先定義一個具有繼承層次的結構。代碼Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1

Effective C# Item29:只有當新版基類導致問題時才考慮使用new修飾符

    我們一般在類成員上使用new修飾符,來重新定義繼承自基類的非虛成員,但是我們不建議這麼做,因為重新定義非虛方法會導致含混不清的行為。    非虛方法是靜態繫結的,編譯器並不會根據對象的運行時類型來判斷應該調用哪個方法;而虛函數使用的是動態綁定,編譯器會根據對象的運行時類型來判斷應該調用哪個方法。    避免使用new

More Effective C# Item8 :儘可能使用泛型方法,除非需要將型別參數用於執行個體的欄位中

    我們需要來討論一下泛型類和泛型方法的取捨。    一般情況下,我們很容易的被泛型型別的定義限制住,但是很多情況下,我們使用泛型方法就可以了。之所以推薦泛型方法,是因為當使用泛型類時,C#編譯器必鬚根據給出的約束為整個泛型類產生合法的IL,而且給出的約束也必須滿足整個類的需要;而泛型方法只需要為滿足泛型方法的約束就可以了,這樣我們可以在同一個類中針對不同的方法設定不同的約束,編譯器根據不同的約束來匹配不同的重載形式,同時使用者也會覺得更加清晰。    來看下面的代碼。代碼Code

Effective C# Item16:盡量減少記憶體垃圾

    雖然.NET提供了記憶體回收機制,可以對託管的資源進行管理,但是建立對象和銷毀對象本身,也是要花費時間的,特別是對於參考型別來說,頻繁的建立和銷毀參考型別的對象,對效能來說,是非常不好的。    我們可以採取一些措施,來改善這種情況。    首先,來看下面的代碼。代碼Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 protected

Effective C# Item46:最小化互操作

    在設計.NET時,充分考慮了當時使用其他語言或者平台編寫的系統,為了使得這些系統可以整合到.NET中,添加了互操作的特性,但是互操作的優勢很少,甚至還會給開發人員帶來一些麻煩。    在所有的互操作策略中,當程式控制流程在本地環境和託管環境的邊界上穿越時,我們都必須為類型提供marshall服務,另外,互操作策略還要求我們自己明確聲明方法參數,最後,當CLR在跨越互操作邊界時,不能進行任何最佳化。   

Effective C# Item12:變數初始化器優於指派陳述式

    之所以推薦在變數聲明時進行初始化,是因為我們定義的類型往往有多個成員變數,這樣會導致有多個構造器,這樣成員變數和構造器之間很可能做不到同步更新。我們可以通過“在聲明變數的同時初始化它們”的方式來解決這個問題。   

Effective C# Item13:使用靜態構造器初始化靜態類成員

    在建立類型的任何執行個體之前,我們需要初始化這個類型中的靜態成員變數,C#可以通過靜態初始化器或者靜態建構函式來完成這個任務,其中靜態構造器是一個特殊的函數,它會在一個類的任何方法、變零或者屬性被訪問之前執行。    我們不應該使用類型的樣本建構函式或者類型中的某些非靜態方法來初始化類型的靜態成員變數。    如果靜態成員初始化的過程不複雜,那麼我們可以在類型的初始化器中對其進行初始化;如果靜態成員初始化時,需要執行大量的邏輯操作,那麼我們可以將其初始化的過程提取到靜態建構函式中。   

Effective C# Item45 : 優先選擇強異常安全保證

    當應用程式捕獲一個異常時,代表著我們為應用程式引入了一個“具有破壞性的事件“,異常可能會對系統資源或者應用程式的狀態有破壞,我們應該避免這種情況發生。    Dave Abrahams對於異常,定義了3種情況:1. 基本保證;2、強保證;3、無異常拋出。   

Effective C# Item28:避免強制類型轉換

    轉換操作為類之間引入了一層“可替換性”,“替換”意味著一個類的執行個體可以被替換為另一個類的執行個體。例如,我們在一個類階層中,在任何使用父類的地方,我們可以使用子類的執行個體進行替代,這是“多態”的作用。    當我們為類型定義了類型轉換操作符後,我們實際上是在告訴編譯器這些類型可以被當做目標類型來使用,這樣的替換經常會導致一些很詭異的Bug,因為我們的類型可能並不是目標類型的完美替代品。    我們來看下面的代碼。代碼Code highlighting produced by

Effective C# Item30:儘可能實現CLS相容的程式集

    CLS是一套針對程式設計語言的變成規範,.NET環境對語言沒有特定的限定,只要是符合CLS規範的語言,我們就可以說它是和.NET相容的語言。在實際的項目開發過程中,我們可以使用不同的語言,例如,當我們需要引入一些第三方產品的程式集時,我們不能保證程式集中使用的語言是和我們使用的程式設計語言是一致的,因此,確保程式集必須是CLS相容的。   

Effective C# Item15:利用using和try/finally語句來清理資源

    在記憶體資源分派方面,.NET可以分為託管資源和非託管資源兩部分。對於託管資源,.NET架構會負責進行記憶體回收的工作;對於非託管的資源,我們需要手動去釋放資源。通常情況下,我們使用IDisposable介面中的Dispose()方法釋放資源,而調用Dispose()方法的責任,由資源的擁有者或者對象的擁有者執行,即我們這些程式員,確保調用Dispose()方法的最佳方式就是使用using或者try/finally語句塊。   

Effective C# Item44:為應用程式建立特定的異常類

    異常是一種報告錯誤的機制,錯誤被處理的位置可能與其出現的位置相距甚遠,所有有關錯誤原因的資訊都必須儲存在異常對象中,在這個過程中,我們可能希望將低級的錯誤翻譯成與應用程式相關的特定錯誤,同時又不失去任何與源錯誤相關的資訊。    我們需要理解何時、為什麼要建立新的異常類,以及怎樣構造有價值的異常類層次。當開發人員編寫catch語句時,他們會根據異常對象在運行時的不同類型來實現不同的行為,每一種行為就需要對應一個不同的異常類。   

總頁數: 4314 1 .... 817 818 819 820 821 .... 4314 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.