提供您專業技能的最佳管道,IT企業主管唯一推薦

提供您專業技能的最佳管道,IT企業主管唯一推薦

2024年1月31日 星期三

.NET 8與C# 12新特性導覽

 

.NET 8與C# 12新特性導覽

羅慧真 Anita Lo

  • 精誠資訊/恆逸教育訓練中心-資深講師
  • 技術分類:程式設計





2023年11月微軟已正式公布 .NET 8 及 C# 12,每一次版本的更新都帶來更方便的語法、執行效能和跨越更多種平台類型 (例如.NET 7公布的.NET MAUI,寫一次程式可使用在 Windows、Andriod、iOS…. 等多種移動式平台),本篇文章將介紹C#12幾項亮眼的更新。

集合表達式

C# 傳統的陣列或集合語法,根據不同情況會有以下幾種不同的寫法:

string[] s1 = new string[] { "a", "b", "c" };
List<string> s2 = new() { "d", "e", "f" };
string[] s3 = Array.Empty<string>();
PrintArray(new string[] { "g", "h", "i" });

其實筆者常常被這[]、{}等符號搞得昏頭轉向的 …


C#12 集合運算式的目的是希望簡化此類語法,統一使用 [],當您使用 Visual Studio 2022 v17.8 以上的版本並開啟 .NET 8 專案時,編輯工具就會建議您使用集合運算式如下圖:



當然這只是建議,若您不理會這個建議,並不會產生編譯錯誤的情況。
以下程式是經過【使用集合運算式】修改之後的程式碼:

string[] s1 = ["a", "b", "c"];
List<string> s2 = ["d", "e", "f"];
string[] s3 = [];
PrintArray(["g", "h", "i"]);

另外,您也可以使用(散佈運算子) 將陣列/集合的元素複製到新的變數位置,語法如下:

string[] s5 = [.. s1, .. s2, .. s3];

列印結果:




主要建構函式

「主要建構函式」首次是出現在record類型,語法如下:

record Student(int id, string name) {
    public int ID { get; set; } = id;
    public string Name { get; set; } = name;
    public override string ToString()
    {
        return "$Student: {ID} -- {Name}";
    }
}

直接在定義類型名稱後面加上建構函式的括號,並指定其參數。


現在C# 12 可以使用在 class 、 struct 類型:

class Manufacturer (string ID, string CompanyName) {
    public string ID { get; set; } = ID;    
    public string CompanyName { get; set;} = CompanyName;

    public override string ToString() =>
         $"Manufacturer: {ID} -- {CompanyName}" ;
    
}

struct CreationDate (int year, byte month, byte day=1 { 
    public DateOnly Date{ get; set; } = new DateOnly(year, month, day);
    public int Year { get; set; } = year; 
    public byte Month { get; set; } = month;
    public byte Day { get; set; } = day;

    public override string ToString() => $"Birthday: {Date}";
    
}

using 別名可定義任何類型

using 別名用來簡化冗長的命名空間,但僅限於命名空間、類型 (類別、結構、泛型 …)

//基本使用方式
using System.Runtime.CompilerServices;
//namespace 的別名
using IO = System.IO;  
//class 的別名
using regex =  System.Text.RegularExpressions.Regex;
using dt = System.DateTime;
using ListString = System.Collections.Generic.List<string>;

C# 12 之後可以使用在更多種類型上:

//C#12 tuple 的別名
using moveTo = (int x, int y);
//C#12 Array
using stringArray = string[];

.NET 8 / C#12不僅只更新這些功能,而C#語法從3.0版到現在的12版已經有更多的改變,您的.NET目前停留在哪個版本啊?

新的一年,給自己新的目標,以下課程可以讓您攝取更多新技術的養分喔!


您可以在【UN492】.NET精粹的極致技術解密之旅 課程當中學到C#的多項重大更新,以及如何從傳統WPF、Windows Forms專案升級到.NET,此課程還將介紹背景工作服務與歷程紀錄(警告訊息、錯誤訊息的Log)以及應用程式的組態、部署與發佈,以幫助您掌握完整的應用程式開發流程。透過這些課程內容,您將能夠建立跨平台的應用程式,並學習使用各種相關的技術和工具,讓您能夠在開發應用程式的過程中更加得心應手。

另外,在跨平台方面可以參考【UN398】.NET MAUI跨界先鋒從桌面到移動的全平台開發旅程 課程,它的前身是由Xamarin.Forms演進而來。使用C#和XAML撰寫一次代碼即可建構可執行於Android、iOS、macOS、Windows上的App。此課程將使用C#、XAML及Visual Studio 2022開發.NET MAUI桌上與行動裝置的應用程式,您將學會如何使用XAML定義UI畫面,了解多種版面配置及使用者經驗,應用資源與樣式達到UI一致性及共享的特質,以及資料存取、WEB API的連結,具備硬體裝置的存取能力,最後知道如何將完成的App部署及預備。


您可在下列課程中了解更多技巧喔!

Related Posts:

  • 【學長姐帶路】沒有IT背景,如何用4個月跨領域轉職程式設計師?不要讓過去的學經歷,限制了你的夢想與未來零經驗、非本科系,也可以四個月成功轉職資訊業!2024.3月上課前,他們都沒有IT背景2024.7月結業一個月內,他們都已成功轉職程式設計師來看看微軟養成班學員的學習分享!👩盧玉雯背景:國立高雄科技大學行銷與流通管理系轉職前:產險公司行政專員➤為什麼想轉職?… Read More
  • 掌握.NET 7,打造跨平台應用作者:羅慧真  精誠資訊/恆逸教育訓練中心資深講師2023年 Microsoft .NET 更新到第七版了。迅速轉動的資訊界,每一年更新幾個版本已經是常態,業界也早已經習慣如此的變動,並且採取的策略便是,若非必要就以不變應萬變,明日地球依舊會轉動。按此策略前進,那麼數算起來,您的… Read More
  • .NET 8 Blazor Identity與資料庫優先作者:許薰尹  恆逸教育訓練中心資深講師ASP.NET Core Identity使用程式碼優先的方式進行開發,要如何搭配資料庫優先的方式,將ASP.NET Core Identity所需的資料表放在指定的現有資料庫之中呢? 這篇文章將一步步詳細說明做法。為了方便產生存取現有的S… Read More
  • .NET MAUI代碼一次撰寫,遊走四大平台(圖片來源:微軟網站)作者:羅慧真  精誠資訊/恆逸教育訓練中心資深講師有想過撰寫一次代碼,遊走四大平台(Android、iOS、macOS、Windows)的實現嗎?  .NET MAUI實現了這樣的願景,它的前身是由 Xamarin.Forms 演進而來。… Read More
  • 跨領域轉職從這裡開始:商科背景,沒有相關經驗,從秘書轉職程式設計師!高中唸的是商科,大學讀的是行銷與流通管理系畢業後因緣際會成為秘書,一做就做了8年左右的秘書工作「其實在2年前有受到朋友的鼓勵,有想學習程式設計轉換職務的念頭,但礙於當時的工作穩定,年齡又已經30幾歲了,因為害怕變動,一直遲遲不敢行動。直到後來工作職場有些變化後,下定決心學習新的技能轉換跑道!」轉職前… Read More

0 意見:

張貼留言