.Net 6+C#10.0正式版初體驗


  昨晚,.Net 6正式版發布,今天一早我就迫不及待的下載安裝了VS2022,同時體驗了一下C#10.0的各種新特性。關於.Net 6的性能提升和具體內部細節還沒來得及仔細研究,先給大家分享一下.Net 6或者說C# 10.0帶來的新特性及對我們開發過程的影響。

1.頂級程序

  首先最直觀可以看到的是當我們創建Web應用或者控制台應用的時候,我們會發現Main函數找不到了,程序編程了這個樣子:

  ·   

 

  這其實並不是C#10.0的新特性,而是C# 9.0新特性中的“頂級程序”,只是在.Net5時使用VS默認生成的代碼框架中並沒有用到頂級程序的寫法,而.Net 6的Web應用和控制台應用中使用了該寫法。但是在.Net 6的WPF或WinForm應用默認代碼中依舊維持原來的寫法。

  對頂級程序用法進行研究后,我發現了以下規律:

  • 雖然.Net6中默認去掉了Main函數,我們依舊可以定義使用Main函數作為程序入口,但是僅限於不編寫頂級函數的情況下,若存在頂級函數,則Main函數不會被默認執行。若已存在頂級程序,則自定義的Main函數不會被執行
  • 如果編寫了頂級程序,則會默認出現Program類,而且這個類不是運行時生成的,我們在IDE中直接就可以打出來,同時,如果你額外在無命名空間的代碼處定義一個Program類則會提示需要使用partail關鍵字。如下圖所示

    

  •  頂級程序前或頂級函數中,不能聲明類、接口、命名空間、record等內容。如果在同一文件中編寫,則此類聲明必須寫在頂級程序后面。

2.全局引用

  在C#10.0語言特性說明中,我們可以看到全局應用。為了方便大家理解和使用全局引用,我總結了以下幾個特點:

  • .Net6中默認存在有一部分全局引用,其使用開關為各項目csproj文件的ImplicistUsings屬性,如果該值為enable,則使用默認引用,如果值為disable則不使用默認引用,如下圖:

     

  • 除默認全局引用外,我們聲明自己所需要的全局引用,用法為:global using xxx; 全局引用的范圍只限於其所在項目,若A項目引用B項目,B的全局引用在A中無效,同時A項目的全局引用在B中也無效。

3.同一個解構中的賦值和聲明

  額,,,C#10.0官方文檔是這么寫的,但是析構是什么東西,從文檔上看明顯不是析構函數,翻找資料后,發現其實這個特性針對的是tuple(元組),這東西在C#7.0中就已經出現,但是一直很少被用到,官方說法是主要應對一些需要多個輸入或輸出的算法。那么我們還是來看一下C#10.0在這一塊更新了什么。

  官方文檔中對此項更新的寫法是這樣:

    

 

  如果大家對元組不熟悉,會搞不清楚point是什么,怎么寫。實際我們寫出完整的例子應該是這樣的

 1 var point = (1, 2);
 2 
 3 int x1 = 0;
 4 int y1 = 0;
 5 (x1, y1) = point;
 6 
 7 int x2, int y2) = point;
 8 
 9 int x3 = 0;
10 (x3, int y3) = point;

  其中第3至5行和第7行的兩種寫法,從C#7.0到現在一直是可用的,但是第9至10行這種寫法,在C#9.0及之前版本是不支持的,10.0之后,加入了對該寫法的支持。

 

  .Net6及C#10.0帶來的新特性非常多,今天先寫到這里,后面的特性解讀我會盡快編寫完成。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM