书籍推荐:《More Effective C#》
很多年前看過Bill Wagner的《Effective C#》第一版,涵蓋了C#2.0相關(guān)語言特性的最佳實踐,教我們怎樣更優(yōu)雅地去編寫C#代碼,當時覺得受益匪淺。最近拿到了《More Effective C#》第二版,目前看了大概三分之二,讓我對C#的的應(yīng)用有了更深入的了解,書雖沒看完,但還是要推薦一下。
《More Effective C#》第二版涵蓋到了C#7.0的特性,全書分為5個大的章節(jié),類型處理、API設(shè)計、異步編程、并行處理和動態(tài)編程,我覺得深入理解前三章便能讓您在工作中如虎添翼,學(xué)習(xí)和了解C#中的一些特性,并且能知道在什么場景下使用這些特性,真正做到了知其然也知其所以然。
只要涉及到編程,總會回歸到各種數(shù)據(jù)類型的操作,怎樣合理的使用數(shù)據(jù)類型,怎樣避免一些陷進,這些在第一章中都會涉及到,比如在判斷兩個對象相等有下面一些原則:
不只是給出了實踐的方法,更是說清楚了其中的原委。
一個有追求的程序員,一定不甘心每天只做CRUD,隨著經(jīng)驗的增長,您可能需要去編寫更下游的程序,需要提供安全、好用、可擴展的方法或接口供上游調(diào)用,即便您只是寫寫WebAPI,依然會被各種端去調(diào)用,第二章的API設(shè)計會讓您少走很多彎路。
比如我們平時在設(shè)計類時,碰到需要做拷貝的,就會很自然想到去實現(xiàn)ICloneable接口,書中告訴了我們?yōu)槭裁床灰崿F(xiàn)ICloneable接口,以及什么情況下可以去實現(xiàn)ICloneable接口。
還有,在調(diào)用.NET一些底層方法時,有時會出現(xiàn)很多的重載版本,那么在我們寫代碼時,會去借鑒,也會寫出有很多重載版本的方法。書中建議我們在初次設(shè)計方法時,可以利用可選參數(shù)和命名參數(shù)來設(shè)計方法的參數(shù),可以減少方法的重載版本,但發(fā)布后,如果有調(diào)整,建議添加重載版本。
第三章講述了怎樣使用異步編程,內(nèi)容雖然不是很多,但如果您已經(jīng)使用過異步編程,這些會讓您理解更加深刻。下面舉一個小例子。
在C#7中加入了本地方法的特性,可以讓我們在方法的內(nèi)部寫方法,代碼如下:
static?void?LocalMethod(){????string?name?=?"oec2003";????string?name1?=?"oec2004";????Console.WriteLine(AddPrefix(name));????Console.WriteLine(AddPrefix(name1));????string?AddPrefix(string?n)????{????????return?$"Hello?{n}";????}}????string?name?=?"oec2003";
????string?name1?=?"oec2004";
????Console.WriteLine(AddPrefix(name));
????Console.WriteLine(AddPrefix(name1));
????string?AddPrefix(string?n)
????{
????????return?$"Hello?{n}";
????}
}
可能您知道有這么一個特性,但并不知道該什么時候用,在不知道的情況下,為了去使用某個特性,可能出現(xiàn)濫用。書中給出了該特性的一個應(yīng)用場景。看下面一段示例代碼:
public?Task<string>?LoadMessage(string?userName){????if?(string.IsNullOrWhiteSpace(userName))????{????????throw?new?AggregateException(message:?"username?is?null");????}????return?LoadMessageImpl();????async?Task<string>?LoadMessageImpl()????{????????var?name?=?await?LoadMessageAsync();????????var?message?=?name????"No?Message";????????return?message;????}}Task<string>?LoadMessageAsync(){????var?task?=?Task.Run(()?=>????{????????Thread.Sleep(5000);????????return?"oec2003";????});????return?task;}????if?(string.IsNullOrWhiteSpace(userName))
????{
????????throw?new?AggregateException(message:?"username?is?null");
????}
????return?LoadMessageImpl();
????async?Task<string>?LoadMessageImpl()
????{
????????var?name?=?await?LoadMessageAsync();
????????var?message?=?name????"No?Message";
????????return?message;
????}
}
Task<string>?LoadMessageAsync()
{
????var?task?=?Task.Run(()?=>
????{
????????Thread.Sleep(5000);
????????return?"oec2003";
????});
????return?task;
}
本文是我閱讀到現(xiàn)在的一個最直觀的感受,書中的內(nèi)容我在理解、消化并進行實踐后會繼續(xù)分享出來。總之,好書是需要反復(fù)閱讀的,直到看到某一小節(jié)的名稱便能說出它的來龍去脈,才是真正的掌握。
總結(jié)
以上是生活随笔為你收集整理的书籍推荐:《More Effective C#》的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Elasticsearch 构建
- 下一篇: C#规范整理·异常与自定义异常