更锋利的C#代码-读书笔记
第一章 基本的代碼風(fēng)格
第二章 養(yǎng)成良好的注釋習(xí)慣
第三章 一般命名規(guī)范
第四章 數(shù)據(jù)處理
??? 1.十六進(jìn)制常量的寫法
??????? int i = 0x0000;
??????? int j = 0x0101;
??????? int m = 2L;
??? 2.浮點(diǎn)數(shù)的表示有誤差!作為條件判斷時(shí)不能與準(zhǔn)確值比較,應(yīng)使用區(qū)間比較。
??????? double i = 0.0;
??????? while (i < 10)
??????? {
??????????? i += 0.1;
??????????? Console.WriteLine(i.ToString());
??????????? if(Math.Abs(i-6.0) < 0.01) //使用區(qū)間比較。if (i == 6.0)
??????????? {
??????????????? Console.WriteLine("OK!");
??????????? }
??????? }
??????? Console.Read();
??? 3.布爾類型是一個(gè)獨(dú)立類型,而不是采用整形數(shù)值來表示。
??? 4.字符類型采用Unicode編碼,需要兩個(gè)字節(jié)的存儲(chǔ)空間。因此char可轉(zhuǎn)換為short/int/long或更寬類型。
??? 5.字符串類型,可以包含轉(zhuǎn)義字符,用“@”可忽略轉(zhuǎn)義字符。
??????? string str = "D:/Document/Photos/Flower.jpg";
??? 6.字符串判斷為空(應(yīng)盡量使用類型本身提供的功能)。
??????? if(str = string.Empty){}
??????? if(string.IsNullOrEmputy(str)){}
??? 7.string類型為不可變類型,對(duì)字符串所做的操作都產(chǎn)生了新的字符串實(shí)例。
??????? 使用“+”連接string效率低,用stringBuilder類型的Append方法連接字符串效率更高。
??? 8.盡可能的使用內(nèi)置關(guān)鍵字。
??????? lock(obj)
??????? {
??????????? DoSomething(obj);
??????? }
??????? 等同于:
??????? System.Threading.Monitor.Enter(obj);
??????? try
??????? {
??????????? DoSomething(obj);
??????? }
??????? finally
??????? {
??????????? System.Threading.Monitor.Exit(obj);
??????? }
??? 9.初始化一切變量!!!
??? 10.把對(duì)于一個(gè)變量的操作,寫到一起,使思路更清晰。
??? 11.構(gòu)建樹形層次結(jié)構(gòu)時(shí),從葉節(jié)點(diǎn)開始構(gòu)建,效率更高。
??? 12.枚舉類型,用來表示一組相對(duì)固定的互斥的有限個(gè)數(shù)的可能性。
??? 13.枚舉類型的命名(Month,ConsoleKey,FontStyles)。
??? 14.標(biāo)記枚舉,各項(xiàng)值都是2的冪數(shù)。
??????? [Flags] //標(biāo)記枚舉
??????? {
??????????? None = 0,?? //默認(rèn)項(xiàng)
??????????? Read = 1,
??????????? Write = 2,
??????????? Modify = 4,
??????????? Execute = 8,
??????????? ReadWrite = Read | Write,?? //組合項(xiàng)
??????????? FullControl = Read | Write | Modify | Execute
??????? }
??? 15.魔數(shù)(Magic Number),是指以數(shù)字形式出現(xiàn)在代碼中的常量。為盡量避免使用數(shù)字,應(yīng)預(yù)定義常量。
?16.避免不易讀懂的長(zhǎng)表達(dá)式。
?17.復(fù)雜表達(dá)式中需要注意帶有副作用(改變操作數(shù)的值)的運(yùn)算符。
第五章 分支結(jié)構(gòu)
??? 1.采用“排除法”檢查異常情況。(缺點(diǎn):程序不會(huì)繼續(xù)執(zhí)行。)
?if(true)
?{
???? MessageBox.Show("error!");
???? return null;
?}
??? 2.使用“標(biāo)志變量”記錄錯(cuò)誤。(優(yōu)點(diǎn):不影響程序的繼續(xù)執(zhí)行。)
?bool successful = true;
?for(int i = 0; i<10; i++)
?{
???? try
???? {
??File.Copy(xxx[i],xxx[i])
???? }
???? catch
???? {
??successful = false;
???? }
?}
?if(!successful)
?{
???? MessageBox.Show("error!");
?}
?return successful;
??? 3.在C#中,"switch"語句不允許貫穿,每個(gè)標(biāo)簽必須以“break”結(jié)束。
??? 4.在switch語句中,應(yīng)避免default子句的濫用。
?…
?default:
???? throw new Exception("error!");
?…
??? 5.switch結(jié)構(gòu)特點(diǎn):每組測(cè)試一個(gè)表達(dá)式,應(yīng)用于整數(shù)、枚舉、字符串類型,書寫簡(jiǎn)潔。
??? 6.無論是if還是switch結(jié)構(gòu),其目標(biāo)是最恰當(dāng)?shù)乇憩F(xiàn)出事物原本的邏輯關(guān)系,并盡可能的使代碼簡(jiǎn)潔。
??? 7.分值結(jié)構(gòu),先判斷最有可能成立的條件。
??? 8.只要不會(huì)引起嚴(yán)重的性能損失,那么可讀性就是最重要的。
??? 9.使用“&&”、“||”,有短路效應(yīng)。
??? 10.在錯(cuò)誤處理中需要使用goto語句。使用goto原則是使程序代碼的邏輯顯得更為清晰。
第六章 循環(huán)結(jié)構(gòu)
??? 1.在C#中,for循環(huán)和while循環(huán)同樣靈活,兩個(gè)結(jié)構(gòu)可以互換,不局限于數(shù)值控制循環(huán)。
??? 2.for循環(huán)和while循環(huán)的差異主要在思維模式上。
??? 3.for循環(huán)更適合于簡(jiǎn)單的數(shù)值迭代。
??? 4.規(guī)則:凡是需要在循環(huán)過程中改變循環(huán)變量值的情況,都應(yīng)避免使用for循環(huán)。
??? 5.用foreach結(jié)構(gòu)輕松實(shí)現(xiàn)對(duì)數(shù)組和集合的遍歷訪問。
??? 6.用foreach本身有一個(gè)限制:整個(gè)遍歷過程中對(duì)集合的操作應(yīng)該是只讀的。
??? 7.對(duì)數(shù)組或集合,用foreach;循環(huán)次數(shù)可預(yù)知,用for;循環(huán)結(jié)構(gòu)復(fù)雜,循環(huán)次數(shù)變化,用while。
??? 8.循環(huán)變量一般使用i、j、k表示,i為最外層,j為中間層,k為最內(nèi)層。
??? 9.循環(huán)嵌套最好三層以內(nèi)。
??? 10.循環(huán)變量最好不要再循環(huán)外使用,在循環(huán)外使用更有意義的變量名(row,col)。
??? 11.循環(huán)變量只用于循環(huán)內(nèi)部時(shí),應(yīng)在for,while語句中定義。
??? 12.避免循環(huán)變量的非常規(guī)應(yīng)用,不要以可讀性為代價(jià)使用所謂的“技巧”,應(yīng)采用標(biāo)志變量的方式進(jìn)行控制。
?bool found = false;
?for(int i = 0; i < max; i++)
?{
???? if(Match(data[i]) == true)
???? {
??found = true;
??break;
???? }
?}
?if(found)
?{
???? Console.WriteLine("Found");
?}
?else
?{
???? Console.WriteLine("No Found");
?}
??? 13.應(yīng)盡量?jī)?yōu)化循環(huán),提高循環(huán)的效率。
??? 14.程序的可讀性非常重要!!!
??? 15.循環(huán)是非常消耗資源的,應(yīng)盡量避免在循環(huán)中做不必要的操作。
第七章 如何使用函數(shù)
??? 1.引入函數(shù),為了實(shí)現(xiàn)代碼復(fù)用,更重要的是隱藏細(xì)節(jié)。
??? 2.使用函數(shù)進(jìn)行抽象,分解完成一件事的步驟,降低復(fù)雜度。
??? 3.函數(shù)重載的目的是方便調(diào)用者
?1)支持多種數(shù)據(jù)類型
?2)支持多種數(shù)據(jù)提供方式
?3)為復(fù)雜的參數(shù)提供默認(rèn)值
??? 4.保持核心代碼的唯一。
?各重載函數(shù)的核心功能應(yīng)該由一個(gè)函數(shù)實(shí)現(xiàn),真正的工作應(yīng)該讓最復(fù)雜的那個(gè)重載版本來完成。
??? 5.參數(shù)的設(shè)計(jì)。
?1)參數(shù)命名:描述性,明確意義。
?2)使用變長(zhǎng)參數(shù)列表。(params string[] filenames)
?3)合理使用ref參數(shù)或out參數(shù)。有時(shí)可以定義一個(gè)結(jié)果或類,作為返回?cái)?shù)據(jù)類型。
?4)參數(shù)的順序:重->輕,入->出。
?5)重載函數(shù)參數(shù)一致性。
??? 6.參數(shù)檢查
?1)檢查零值和空引用。
?2)檢查枚舉類型。
?3)防止數(shù)據(jù)被篡改,對(duì)于引用類型,應(yīng)先制作一份私有副本,再進(jìn)行驗(yàn)證和處理。
?4)檢查數(shù)據(jù)合法性的位置。
??? 7.離開函數(shù)的三種方式:自然結(jié)束;return;異常。
第八章 結(jié)構(gòu)與類
轉(zhuǎn)載于:https://www.cnblogs.com/kimblog/archive/2011/04/28/2279491.html
總結(jié)
以上是生活随笔為你收集整理的更锋利的C#代码-读书笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习 jQuery下拉框,单选框,多选框
- 下一篇: HDU 2177HDU 2176