自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#基礎(chǔ)之C#代碼的注意事項(xiàng)(下)

開發(fā) 后端
本文介紹的是我們寫C#代碼的一些注意事項(xiàng),主要為大家介紹了50個(gè)方面的。希望對(duì)大家有幫助,一起來(lái)看。

關(guān)于代碼優(yōu)化的問(wèn)題,之前也給大家介紹過(guò)相關(guān)的內(nèi)容。下面介紹的是C#代碼優(yōu)化的一些注意事項(xiàng),供參考。接上一篇>>

二十六、使用IComparable和IComparer接口實(shí)現(xiàn)排序關(guān)系

1、IComparable接口用于為類型實(shí)現(xiàn)最自然的排序關(guān)系,重載四個(gè)比較操作符,可以提供一個(gè)重載版的CompareTo()方法,讓其接受具體類型作為參數(shù);

2、IComparer用于提供有別于IComparable的排序關(guān)系,或者為我們提供類型本身說(shuō)沒(méi)有實(shí)現(xiàn)的排序關(guān)系。

二十七、避免ICloneable接口

1、對(duì)于值類型永遠(yuǎn)不需要支持ICloneable接口使用默認(rèn)的賦值操作即可;

2、對(duì)于可能需要支持ICloneable接口的基類,應(yīng)該為其創(chuàng)造一個(gè)受保護(hù)的復(fù)制構(gòu)造器,并應(yīng)當(dāng)避免支持IConeable接口。

二十八、避免強(qiáng)制轉(zhuǎn)換操作符

通過(guò)使用構(gòu)造器來(lái)代替轉(zhuǎn)換操作符可以使轉(zhuǎn)換工作變得更清晰,由于在轉(zhuǎn)換后使用的臨時(shí)對(duì)象,容易導(dǎo)致一些詭異的BUG。

二十九、只有當(dāng)新版積累導(dǎo)致問(wèn)題是才考慮使用new修飾符

三十、盡可能實(shí)現(xiàn)CLS兼容的程序集

1、創(chuàng)建一個(gè)兼容的程序集需要遵循兩條規(guī)則:程序集中所有公有和受保護(hù)成員所使用的參數(shù)和返回值類型都必須與CLS兼容;任何與CLS不兼容的公有和受保護(hù)成員都必須有一個(gè)與CLS兼容的替代品;

2、可以通過(guò)顯式實(shí)現(xiàn)接口來(lái)避開CLS兼容類型檢查,及CLSCompliantAttribute不會(huì)檢查私有的成員的CLS兼容性。

三十一、盡可能實(shí)現(xiàn)短小簡(jiǎn)潔的方法

1、JIT編譯器以方法為單位進(jìn)行編譯,沒(méi)有被調(diào)用的方法不會(huì)被JIT編譯;

2、如果將較長(zhǎng)的Switch中的Case語(yǔ)句的代碼替換成一個(gè)一個(gè)的方法,則JIT編譯器所節(jié)省的時(shí)間將成倍增加;

3、短小精悍的方法并選擇較少的局部變量可以獲得優(yōu)化的寄存器使用;

4、方法內(nèi)的控制分支越少,JIT編譯器越容易將變量放入寄存器。

三十二、盡可能實(shí)現(xiàn)小尺寸、高內(nèi)聚的程序集

1、將所有的公有類以及共用的基類放到一些程序集中,把“為公有類提供功能的工具類”也放入同樣的程序集中,把相關(guān)的公有接口打包到他們自己的程序集中,最后處理遍布應(yīng)用程序中“水平”位置的類;

2、原則上創(chuàng)建兩種組件:一種為小而聚合、具有某項(xiàng)特定功能的程序集,另一種為大而寬、包含共用功能的程序集。

三十三、限制類型的可見(jiàn)性

1、使用接口來(lái)暴露類型的功能,可以使我們更方便地創(chuàng)建內(nèi)部類,同時(shí)又不會(huì)限制他們?cè)诔绦蚣獾目捎眯裕?/p>

2、向外暴露的公有類型越少,未來(lái)擴(kuò)展和更改實(shí)現(xiàn)所擁有的選擇就越多。

三十四、創(chuàng)建大粒度的Web API

這是在機(jī)器之間的交易的頻率和載荷都降到最低,將大的操作和細(xì)粒度的執(zhí)行放到服務(wù)器執(zhí)行。

三十五、重寫優(yōu)于事件處理器

1、一個(gè)事件處理器拋出異常,則事件鏈上的其他處理器將不會(huì)被調(diào)用,而重寫的虛方法則不會(huì)出現(xiàn)這種情況;

2、重寫要比關(guān)聯(lián)事件處理器高效得多,事件處理器需要迭代整個(gè)請(qǐng)求列表,這樣占用了更多的CPU時(shí)間;

3、事件能在運(yùn)行時(shí)響應(yīng),具有更多的靈活性,可以對(duì)同一個(gè)事件關(guān)聯(lián)多個(gè)響應(yīng);

4、通行的規(guī)則是處理一個(gè)派生類的事件是,重寫方式較好。

三十六、合理使用.NET運(yùn)行時(shí)診斷

1、System.Diagnostics.Debug\Trace\EventLog為運(yùn)行時(shí)提供了程序添加診斷信息所需要的所有工具,EventLog提供入口時(shí)的應(yīng)用程序能寫到系統(tǒng)事件日志中;

2、最后不要寫自己的診斷庫(kù),.NET FCL 已經(jīng)擁有了我們需要的核心庫(kù)。

三十七、使用標(biāo)準(zhǔn)配置機(jī)制

1、.NET框架的System.Windows.Application類為我們定義了建立通用配置路徑的屬性;

2、Application.LocalAppDataPath和Application.userDataPath 會(huì)生成本地?cái)?shù)據(jù)目錄和用戶數(shù)據(jù)的路徑名;

3、不要在ProgramFiles和Windows系統(tǒng)目錄中寫入數(shù)據(jù),這些位置需要更高的安全權(quán)限,不要指望用戶擁有寫入的權(quán)限。

三十八、定制和支持?jǐn)?shù)據(jù)綁定

1、BindingMananger和CurrencyManager這兩個(gè)對(duì)象實(shí)現(xiàn)了控件和數(shù)據(jù)源之間的數(shù)據(jù)傳輸;

2、數(shù)據(jù)綁定的優(yōu)勢(shì):使用數(shù)據(jù)綁定要比編寫自己的代碼簡(jiǎn)單得多;應(yīng)該將它用于文本數(shù)據(jù)項(xiàng)之外的范圍-其他顯示屬性也可以被綁定;對(duì)于Windowos Forms 數(shù)據(jù)綁定能夠處理多個(gè)控件同步的檢查相關(guān)數(shù)據(jù)源;

3、在對(duì)象不支持所需的屬性時(shí)可以通過(guò)屏蔽當(dāng)前的對(duì)象然后添加一個(gè)想要的對(duì)象來(lái)支持?jǐn)?shù)據(jù)綁定。

三十九、使用.NET驗(yàn)證

1、ASP.NET中有五種控件來(lái)驗(yàn)證有效性,可以用CustomValidator派生一個(gè)新類來(lái)增加自己的認(rèn)證器;

2、Windows驗(yàn)證需要子System.Windows.Forms.Control.Validating些一個(gè)事件處理器。

四十、根據(jù)需要選用恰當(dāng)?shù)募?br />

1、數(shù)組有兩個(gè)比較明顯的缺陷:不能動(dòng)態(tài)的調(diào)整大??;調(diào)整大小非常耗時(shí);

2、ArrayList混合了一維數(shù)組和鏈表的特征,Queue和Stack是建立在Array基礎(chǔ)上的特殊數(shù)組;

3、當(dāng)程序更加靈活的添加和刪除項(xiàng)時(shí),可以使更加健壯的集合類型,當(dāng)創(chuàng)建一個(gè)模擬集合的類時(shí),應(yīng)當(dāng)為其實(shí)現(xiàn)索引器和IEnumberable接口。

四十一、DataSet優(yōu)于自定義結(jié)構(gòu)

1、DataSet有兩個(gè)缺點(diǎn)個(gè):使用XML序列化機(jī)制的DataSet與非.NET 代碼之間的交互不是很好;DataSet是一個(gè)非常通用的容器;

2、強(qiáng)類型的DataSet打破了更多的設(shè)計(jì)規(guī)則,其獲得的開發(fā)效率要遠(yuǎn)遠(yuǎn)高于自己編寫的看上去更為優(yōu)雅的設(shè)計(jì)。

四十二、利用特性簡(jiǎn)化反射

通過(guò)設(shè)計(jì)和實(shí)現(xiàn)特性類,強(qiáng)制開發(fā)人員用他們來(lái)聲明可被動(dòng)態(tài)使用的類型、方法和屬性,可以減少應(yīng)用程序的運(yùn)行時(shí)錯(cuò)誤,提高軟件的用戶滿意度。

四十三、避免過(guò)度使用反射

1、Invoke成員使用的參數(shù)和返回值都是System.Object,在運(yùn)行時(shí)進(jìn)行類型的轉(zhuǎn)換,但出現(xiàn)問(wèn)題的可能性也變得更多了;

2、接口使我們可以得到一個(gè)更為清晰、也更具可維護(hù)性的系統(tǒng),反射式一個(gè)很強(qiáng)大的晚期綁定機(jī)制.NET框架使用它來(lái)實(shí)現(xiàn)Windows控件和Web控件的數(shù)據(jù)綁定。

四十四、為應(yīng)用程序創(chuàng)建特定的異常類

1、需要不同的異常類的唯一原因是讓用戶在編寫catch處理器時(shí)能夠方便地對(duì)不同的錯(cuò)誤采取不同的做法;

2、可能有不同的修復(fù)行為時(shí)我們才應(yīng)該創(chuàng)建多種不同的異常類,通過(guò)提供異?;愃С值乃袠?gòu)造器,可以為應(yīng)用程序創(chuàng)建功能完整的異常類,使用InnerException屬性可以保存更低級(jí)別錯(cuò)誤條件所產(chǎn)生的所有錯(cuò)誤信息。

四十五、優(yōu)先選擇異常安全保證

1、”強(qiáng)異常保證”在“從異常中恢復(fù)”和“簡(jiǎn)化異常處理”之間提供了最好的平衡,在操作因?yàn)楫惓6袛?,程序的狀態(tài)保留不變;

2、對(duì)將要修改的數(shù)據(jù)做“防御性的復(fù)制”,對(duì)這些數(shù)據(jù)的“防御性復(fù)制”進(jìn)行修改,這中間的操作可能會(huì)引發(fā)異常,將臨時(shí)的副本和原對(duì)象進(jìn)行交換;

3、終結(jié)器、Dispose()方法和委托對(duì)象所綁定的目標(biāo)方法在任何情況下都應(yīng)當(dāng)確保他們不會(huì)拋出異常。

四十六、最小化互操作

1、互操作有三個(gè)方面的代價(jià):數(shù)據(jù)在托管堆和非托管堆之間的列舉成本,托管代碼和非托管代碼之間切換的成本,對(duì)開發(fā)人員來(lái)說(shuō)與混合環(huán)境打交道的開發(fā)工作;

2、在interop中使用blittable類型可以有效地在托管和非托管環(huán)境中來(lái)回復(fù)制,而不受對(duì)象內(nèi)部結(jié)構(gòu)的影響;

3、使用In/Out特性來(lái)確保最貼切的不必要的多次復(fù)制,通過(guò)聲明數(shù)據(jù)如何被列舉來(lái)提高性能;

4、使用COM Interop用最簡(jiǎn)單的方式實(shí)現(xiàn)和COM組件的互操作,使用P/Invoke調(diào)用Win32 API,或者使用C++編譯器的/CLR開關(guān)來(lái)混合托管和非托管的代碼;

四十七、優(yōu)先選擇安全代碼

1、盡可能的避免訪問(wèn)非托管內(nèi)存,隔離存儲(chǔ)不能防止來(lái)自托管代碼和受信用戶的訪問(wèn);

2、程序集在Web上運(yùn)行時(shí)可以考慮使用隔離存儲(chǔ),當(dāng)某些算法確實(shí)需要更高的安全許可時(shí),應(yīng)該將那些代碼隔離在一個(gè)單獨(dú)的程序集中。

四十八、掌握相關(guān)工具與資源

1、使用NUnit建立自動(dòng)單元測(cè)試(集成在VS2010 中了);

2、FXCop工具會(huì)獲取程序集中的IL代碼,并將其與異族編碼規(guī)則和最佳實(shí)踐對(duì)照分析,最后報(bào)告違例情況;

3、ILDasm是一個(gè)IL反匯編工具,可以幫助我們洞察細(xì)節(jié);

4、Shared Source CLI是一個(gè)包含.NET框架內(nèi)核和C#編譯器的實(shí)現(xiàn)源碼。

四十九、為C#2.0做準(zhǔn)備(這個(gè)規(guī)則現(xiàn)在已經(jīng)沒(méi)什么意義了,畢竟現(xiàn)在已經(jīng)到了4.0 )

五十、了解ECMA標(biāo)準(zhǔn)

到這,關(guān)于C#編碼的注意事項(xiàng),就給大家介紹完了。希望對(duì)你有幫助。

本文地址: http://www.caodong.net/Article/1455.html

【編輯推薦】

  1. 漫談C#開發(fā)中的ASP.NET頁(yè)生命周期
  2. C#中 As 和強(qiáng)制轉(zhuǎn)換的總結(jié)
  3. 分享c#常用函數(shù)和方法集
  4. 詳談C#和.NET中的類型轉(zhuǎn)換
  5. C#值類型賦值與引用類型的賦值

 

 

責(zé)任編輯:于鐵 來(lái)源: saiyo
相關(guān)推薦

2011-07-06 09:44:34

C#

2009-09-01 17:25:33

初學(xué)C#編程

2009-08-06 16:13:16

C# Web Serv

2011-04-22 09:14:26

C#委托

2011-07-06 11:04:42

C#正則表達(dá)式

2009-08-25 17:59:49

C#入門

2021-03-15 08:18:23

C#反射模塊

2011-06-08 14:22:51

延遲加載

2010-12-22 10:21:17

C#基礎(chǔ)

2011-07-06 10:14:46

C#

2009-08-25 17:15:50

C#隱藏C#重寫C#重載

2010-01-18 16:12:16

CC++語(yǔ)言

2010-01-18 14:25:19

使用C++Builde

2009-08-25 16:32:24

C#語(yǔ)言

2009-08-13 18:02:50

C#基礎(chǔ)概念

2009-08-27 11:43:31

C#語(yǔ)法

2009-08-19 15:38:59

C#代碼

2010-01-14 18:19:40

C++語(yǔ)言

2010-01-25 18:12:28

C++

2014-07-29 10:12:38

LinuxC語(yǔ)言編程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)