日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#进化史

發布時間:2023/11/29 C# 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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寫的產品類


存在的三個限制:

  • ArrayList不能提供編譯時信息,不小心添加錯誤類型的數據不會被編譯器發現;
  • 屬性有公共的取值方法,對應的賦值方法也必須是公共的;
  • 封裝字段有點麻煩,需要先聲明字段,然后封裝屬性。
  • C# 強類型集合——解決限制1和2

  • C# 2中最重要的改進——引入了泛型,試圖添加錯誤類型的數據時會得到編譯時錯誤;
  • 屬性擁有了私有的賦值方法。
  • c# 自動屬性——解決限制3


    C# 3還提供了Lambda表達式等特性。

    c# 4 命名實參

    非常不幸的是,對于需要只讀屬性,沒有快捷方式。

    C# 4增加了命名實參——當包含多個參數,參數類型相同,或某個參數為null時——使代碼的含義更清楚。

    C# 1~C# 4的演變歷程


    Product類型的演變歷程,展示了越來越好的封裝性、越來越強的類型化以及越來越容易的初始化。

    排序

    按名稱排序。

    C# 1——提供一個IComparer實現



    存在的限制:

  • 必須引入一個額外的類型來幫助排序;
  • Copare方法中需要強制類型轉換,foreach語句中也需要隱式的強制類型轉換,由于ArrayList不是強類型,所以可能會造成執行時失敗。
  • 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類型:
  • 圍繞decimal建立一個引用包裝類型;
  • 維護一個單獨的Boolean標識,它表示價格是否已知;
  • “魔法數”——使用一個特殊值表示未知價格。
    • C# 2引入可空類型,
      C# 2引入Nullable<T>類型,甚至提供了一些語法糖decimal? price;。如此一來可以將null作為參數傳遞。

    注意:可空類型和null進行比較,總是會返回false,因此,對于price > 10等價的!(price <= 10會得到錯誤的答案。

    可選參數和默認值

    對于方法的某些參數可能總是使用特定的值,傳統的方式是使用方法重載。C# 4引入了可選參數來簡化這一操作。——public 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互操作

  • 使用命名實參調用SaveAs,并且許多可選參數被省略(正常情況下,SaveAs有十個額外的實參);
  • C# 4將PLA(Primary Interop Assembly, 主互操作程序集)的相關部分內嵌到調用代碼中,因此無需單獨部署PLA。
  • 與動態語言互操作——dynamic

    dynamic——它對C#編譯器來說是一個類型,但CLR并不認識它。下例展示與Python代碼進行交互。

    動態類型可能會在執行時才暴露代碼編寫錯誤。

    C# 5的重大改進——異步函數

    Windows Forms中的線程有兩條金科玉律:

  • 不能阻塞UI線程;
  • 不能在任何線程中訪問UI元素。
  • 使用異步函數:



    來自為知筆記(Wiz)

    轉載于:https://www.cnblogs.com/qianzi067/p/6019615.html

    總結

    以上是生活随笔為你收集整理的C#进化史的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。