如何在C#9 中使用頂級(jí)程序 (top-level)
當(dāng)我們用 C# 進(jìn)行編碼的時(shí)候,總需要寫(xiě)很多的模板代碼,即使是最簡(jiǎn)單的 console 程序,想象一下,如果去測(cè)試一個(gè) 類(lèi)庫(kù) 或者 API 的功能,通常你會(huì)用 Console 程序去實(shí)現(xiàn),在開(kāi)始工作的時(shí)候會(huì)發(fā)現(xiàn)你受到了 C# 標(biāo)準(zhǔn)模板的限制,業(yè)務(wù)邏輯必須要寫(xiě)在 Main 里,如下代碼所示:
class Program { static void Main(string[] args) { //todo } }
頂級(jí)程序 是 C#9 中引入的一個(gè)新概念,允許你直接寫(xiě)自己的業(yè)務(wù)邏輯而不必受到模板代碼的限制,頂級(jí)程序 是一個(gè)非常🐂👃的特性,可以讓代碼更加的干凈,簡(jiǎn)短和可讀,你可以通過(guò)頂級(jí)程序去探索新的 idea,這篇文章將會(huì)討論如何在 C#9 中使用頂級(jí)程序。
頂級(jí)程序
在 C# 9.0 之前,下面的寫(xiě)法在 Console 程序中已經(jīng)是最小化的了。
using System; namespace IDG_Top_Level_Programs_Demo { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } } }
在 C# 9.0 時(shí)代,可以祭出 頂級(jí)程序 來(lái)消除那些煩人的模板代碼,讓代碼的邏輯意圖更明顯,改造后的代碼如下:
using System; Console.WriteLine("Hello World!");
頂級(jí)程序中的方法
你也可以在頂級(jí)程序中使用方法,如下例子所示:
System.Console.WriteLine(DisplayMessage("Joydip!")); System.Console.Read(); static string DisplayMessage(string name) { return "Hello, " + name; }
程序跑起來(lái)后,控制臺(tái)將會(huì)輸出:Hello, Joydip!
頂級(jí)程序中的類(lèi)
你也可以在頂級(jí)程序中使用類(lèi),結(jié)構(gòu)體,枚舉,下面的代碼展示了如何使用。
System.Console.WriteLine(new Author().DisplayMessage("Joydip!")); System.Console.Read(); public class Author { public string DisplayMessage(string name) { return "Hello, " + name; } }
頂級(jí)程序的原理分析
現(xiàn)在我們來(lái)分析一下,頂級(jí)程序的底層邏輯到底是怎么樣的,它本質(zhì)上是一種語(yǔ)法糖,一種編譯器的特性,也就是說(shuō)你沒(méi)有寫(xiě)模板代碼的時(shí)候,編譯器會(huì)幫你生成,替你負(fù)重前行,參考下面的代碼段。
using System; Console.WriteLine("Hello World!");
然后用在線工具 SharpLab https://sharplab.io/ 看一下編譯器替你補(bǔ)齊的代碼。
using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Security; using System.Security.Permissions; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] [module: UnverifiableCode] [CompilerGenerated] internal static class <Program>$ { private static void <Main>$(string[] args) { Console.WriteLine("Hello World!"); } }
總的來(lái)說(shuō),頂級(jí)程序 非常適合那些想 快速試錯(cuò),驗(yàn)證想法 的場(chǎng)景,有一點(diǎn)要特別注意,應(yīng)用程序中只能僅有一個(gè)文件使用 頂級(jí)程序,如果存在多個(gè),編譯器會(huì)拋出錯(cuò)誤的,還有一點(diǎn),如果你是 C# 新手,你可能不理解頂級(jí)程序的底層邏輯,更好的方式就是老老實(shí)實(shí)的使用原生模板代碼,當(dāng)你主宰了 Main 后,你將會(huì)理解 頂級(jí)程序 是多么的短小精悍!
以上就是如何在C#9 中使用頂級(jí)程序 (top-level)的詳細(xì)內(nèi)容,更多關(guān)于C#9 中使用頂級(jí)程序 (top-level)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- C#9.0新特性詳解——頂級(jí)程序語(yǔ)句(Top-Level Programs)
- 如何在C#9 中使用static匿名函數(shù)
- C#9.0:Init相關(guān)總結(jié)
- 使用C#9中records作為強(qiáng)類(lèi)型ID的實(shí)例教程
- C#9新特性之增強(qiáng)的模式匹配
- C#9新特性init only setter的使用
- 深入談?wù)凜#9新特性的實(shí)際運(yùn)用
- 利用C#9.0新語(yǔ)法如何提升if語(yǔ)句美感
- C#9.0主要特性的一些想法
- C#9.0 新特性簡(jiǎn)介
- 淺談C#9.0新特性之參數(shù)非空檢查簡(jiǎn)化
相關(guān)文章
Unity打開(kāi)淘寶app并跳轉(zhuǎn)到商品頁(yè)面功能的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于如何利用Unity打開(kāi)淘寶app并跳轉(zhuǎn)到商品頁(yè)面功能的相關(guān)資料,這個(gè)功能目前在網(wǎng)上找不到相關(guān)的解決方法,所以自己寫(xiě)了出來(lái),需要的朋友可以參考下2021-07-07c#泛型序列化對(duì)象為字節(jié)數(shù)組的示例
這篇文章主要介紹了c#泛型序列化對(duì)象為字節(jié)數(shù)組的示例,需要的朋友可以參考下2014-04-04c#獲取季度時(shí)間實(shí)例代碼(季度的第一天)
這篇文章主要介紹了c#獲取季度時(shí)間:季度的第一天、季度的最后一天等功能,大家參考使用吧2013-12-12C#實(shí)現(xiàn)復(fù)制文件夾中文件到另一個(gè)文件夾的方法
這篇文章主要介紹了C#實(shí)現(xiàn)復(fù)制文件夾中文件到另一個(gè)文件夾的方法,實(shí)例分析了C#實(shí)現(xiàn)文件夾的查找、判斷及文件復(fù)制相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07C#實(shí)現(xiàn)帶消息數(shù)的App圖標(biāo)
這篇文章主要介紹了如何使用C#實(shí)現(xiàn)帶消息數(shù)的App圖標(biāo)的方法,并附上全部源碼,分享給大家,有需要的小伙伴可以參考下。2015-12-12簡(jiǎn)述C#枚舉高級(jí)戰(zhàn)術(shù)
這篇文章主要介紹了簡(jiǎn)述C#枚舉高級(jí)戰(zhàn)術(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10