如何在 C#9 中使用程序 (Top-Level)

开发 后端
顶级程序的底层逻辑到底是怎么样的,它本质上是一种语法糖,一种编译器的特性,也就是说你没有写模板代码的时候,编译器会帮你生成,替你负重前行,参考下面的代码段。

[[390041]]

本文转载自微信公众号「码农读书」,作者码农读书 。转载本文请联系码农读书公众号。

当我们用 C# 进行编码的时候,总需要写很多的模板代码,即使是最简单的 console 程序,想象一下,如果去测试一个 类库 或者 API 的功能,通常你会用 Console 程序去实现,在开始工作的时候会发现你受到了 C# 标准模板的限制,业务逻辑必须要写在 Main 里,如下代码所示:

  1. class Program 
  2.    { 
  3.        static void Main(string[] args) 
  4.        { 
  5.            //todo 
  6.        } 
  7.    } 

顶级程序 是 C#9 中引入的一个新概念,允许你直接写自己的业务逻辑而不必受到模板代码的限制,顶级程序 是一个非常的特性,可以让代码更加的干净,简短和可读,你可以通过顶级程序去探索新的 idea,这篇文章将会讨论如何在 C#9 中使用顶级程序。

顶级程序

在 C# 9.0 之前,下面的写法在 Console 程序中已经是最小化的了。

  1. using System; 
  2. namespace IDG_Top_Level_Programs_Demo 
  3.     class Program 
  4.     { 
  5.         static void Main(string[] args) 
  6.         { 
  7.             Console.WriteLine("Hello World!"); 
  8.         } 
  9.     } 

在 C# 9.0 时代,可以祭出 顶级程序 来消除那些烦人的模板代码,让代码的逻辑意图更明显,改造后的代码如下:

  1. using System; 
  2. Console.WriteLine("Hello World!"); 

顶级程序中的方法

你也可以在顶级程序中使用方法,如下例子所示:

  1. System.Console.WriteLine(DisplayMessage("Joydip!")); 
  2. System.Console.Read(); 
  3. static string DisplayMessage(string name
  4.     return "Hello, " + name

程序跑起来后,控制台将会输出:Hello, Joydip!

顶级程序中的类

你也可以在顶级程序中使用类,结构体,枚举,下面的代码展示了如何使用。

  1. System.Console.WriteLine(new Author().DisplayMessage("Joydip!")); 
  2. System.Console.Read(); 
  3. public class Author 
  4.     public string DisplayMessage(string name
  5.     { 
  6.         return "Hello, " + name
  7.     } 

顶级程序的原理分析

现在我们来分析一下,顶级程序的底层逻辑到底是怎么样的,它本质上是一种语法糖,一种编译器的特性,也就是说你没有写模板代码的时候,编译器会帮你生成,替你负重前行,参考下面的代码段。

  1. using System; 
  2. Console.WriteLine("Hello World!"); 

然后用在线工具 SharpLab https://sharplab.io/ 看一下编译器替你补齐的代码。

  1. using System; 
  2. using System.Diagnostics; 
  3. using System.Reflection; 
  4. using System.Runtime.CompilerServices; 
  5. using System.Security; 
  6. using System.Security.Permissions; 
  7. [assembly: CompilationRelaxations(8)] 
  8. [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] 
  9. [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] 
  10. [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] 
  11. [assembly: AssemblyVersion("0.0.0.0")] 
  12. [module: UnverifiableCode] 
  13. [CompilerGenerated] 
  14. internal static class <Program>$ 
  15.     private static void <Main>$(string[] args) 
  16.     { 
  17.         Console.WriteLine("Hello World!"); 
  18.     } 

总的来说,顶级程序 非常适合那些想 快速试错,验证想法 的场景,有一点要特别注意,应用程序中只能仅有一个文件使用 顶级程序,如果存在多个,编译器会抛出错误的,还有一点,如果你是 C# 新手,你可能不理解顶级程序的底层逻辑,更好的方式就是老老实实的使用原生模板代码,当你主宰了 Main 后,你将会理解 顶级程序 是多么的短小精悍!

译文链接:https://www.infoworld.com/article/3612196/how-to-use-top-level-programs-in-csharp-9.html

 

责任编辑:武晓燕 来源: 码农读书
相关推荐

2020-12-31 07:31:10

C# 反射数据

2021-03-07 16:37:52

C#应用程序

2021-02-01 12:36:59

C# Channels存储

2021-01-18 05:18:18

C# 8模式C# 7

2021-01-19 05:30:55

C# 8异步流IEnumerable

2021-01-22 05:53:08

C# IndexRange

2021-01-28 05:14:40

C#接口签名

2021-03-09 07:27:40

Kafka开源分布式

2015-08-27 09:46:09

swiftAFNetworkin

2022-05-17 08:25:10

TypeScript接口前端

2024-01-18 08:37:33

socketasyncio线程

2021-06-09 09:36:18

DjangoElasticSearLinux

2022-06-23 08:00:53

PythonDateTime模块

2011-08-10 09:31:41

Hibernateunion

2019-09-16 19:00:48

Linux变量

2020-11-30 11:55:07

Docker命令Linux

2020-04-09 10:18:51

Bash循环Linux

2014-07-02 09:47:06

SwiftCocoaPods

2009-08-04 10:29:06

在C#中使用存储过程

2009-03-30 10:34:03

ASP.NETMySQL
点赞
收藏

51CTO技术栈公众号