C#进化史
C#進化史
C#進化史從數據類型看C#演化
C# 1寫的產品類
C# 強類型集合——解決限制1和2
c# 自動屬性——解決限制3
c# 4 命名實參
C# 1~C# 4的演變歷程
排序
C# 1——提供一個IComparer實現
C# 2——泛型比較器
C# 3——Lambda表達式、擴展方法
C# 1~C# 3簡化排序的歷程
查詢集合
C# 1——循環測試條件
C# 2——測試和打印分開
C# 3——移除委托邏輯的復雜包裹
C# 1~c# 3查詢集合的演化
處理未知數據
處理可空值的方式
可選參數和默認值
小結
C# 3的重大改進——LINQ
查詢表達式和進程內查詢
查詢XML
查詢SQL
C# 4的重大改進——互操作性(COM和動態語言)
簡化的COM互操作
與動態語言互操作——dynamic
C# 5的重大改進——異步函數
C# 1可以看做是2001年Java語言的升級版——額外的特性:語言特性的屬性、委托和事件,foreach循環,using語句,顯式方法重載,操作符重載,自定義值類型等。
從數據類型看C#演化
C# 1寫的產品類
存在的三個限制:
C# 強類型集合——解決限制1和2
c# 自動屬性——解決限制3
C# 3還提供了Lambda表達式等特性。
c# 4 命名實參
非常不幸的是,對于需要只讀屬性,沒有快捷方式。
C# 4增加了命名實參——當包含多個參數,參數類型相同,或某個參數為null時——使代碼的含義更清楚。
C# 1~C# 4的演變歷程
Product類型的演變歷程,展示了越來越好的封裝性、越來越強的類型化以及越來越容易的初始化。
排序
按名稱排序。
C# 1——提供一個IComparer實現
存在的限制:
C# 2——泛型比較器
C# 2不僅解決了限制2,還解決了限制1:
現在無需額外的比較器類了,而是創建一個委托實例。
C# 3——Lambda表達式、擴展方法
Lambda表達式簡化了委托——無需delegate關鍵字,也無需指定參數類型。
擴展方法——為List提供了原本沒有的排序方法。
C# 1~C# 3簡化排序的歷程
查詢集合
找出最貴的產品。
C# 1——循環測試條件
foreach進行循環,用if測試條件,再顯示產品。
C# 2——測試和打印分開
變量test的初始化使用了匿名方法,print變量的初始化使用了方法組轉換。并不是上述代碼比C# 1的代碼簡單,它只是鼓勵你多做分解。下面是C# 2的另一個版本。
C# 3——移除委托邏輯的復雜包裹
C# 1~c# 3查詢集合的演化
處理未知數據
處理可空值的方式
- C# 1有三種解決方案:
比如產品價格,decimal類型:
- C# 2引入可空類型,
C# 2引入Nullable<T>類型,甚至提供了一些語法糖decimal? price;。如此一來可以將null作為參數傳遞。
注意:可空類型和null進行比較,總是會返回false,因此,對于price > 10等價的!(price <= 10會得到錯誤的答案。
可選參數和默認值
對于方法的某些參數可能總是使用特定的值,傳統的方式是使用方法重載。C# 4引入了可選參數來簡化這一操作?!猵ublic Product(string name, decimal? price = null)。
小結
C# 3的重大改進——LINQ
C# 2更像是對C# 1各種不足之處的修修補補,而C# 3幾乎所有的特性都是為了構建LINQ。
查詢表達式和進程內查詢
上述代碼使用了LINQ,如果不用反而更簡單,但是在一些復雜情況下,換成方法調用來寫,代碼會變得難以閱讀,這時LINQ就顯得非常好用了。
LINQ借用了SQL的語法和一些思路。但它可以從任意源(比如XML)獲取數據。
查詢XML
查詢SQL
為什么將所有數據從數據庫拽回來,然后使用.NET查詢和排序?為什么不直接讓數據庫做它擅長的事?
事實上,這正是LINQ to SQL所做的事——用C#代碼表示查詢,但卻是作為SQL來執行的。
C# 4的重大改進——互操作性(COM和動態語言)
簡化的COM互操作
與動態語言互操作——dynamic
dynamic——它對C#編譯器來說是一個類型,但CLR并不認識它。下例展示與Python代碼進行交互。
動態類型可能會在執行時才暴露代碼編寫錯誤。
C# 5的重大改進——異步函數
Windows Forms中的線程有兩條金科玉律:
使用異步函數:
來自為知筆記(Wiz)
轉載于:https://www.cnblogs.com/qianzi067/p/6019615.html
總結
- 上一篇: HBuilder完成webApp入门(2
- 下一篇: 梦到宝宝会说话了是什么意思