如何在C#9 中使用顶级程序 (top-level)

作者:码农读书 时间:2023-08-20 04:13:24 

目录
  • 顶级程序

  • 顶级程序中的方法

  • 顶级程序中的类

  • 顶级程序的原理分析

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


    class Program
    {
        static void Main(string[] args)
        {
            //todo
        }
    }

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

顶级程序

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


using System;
namespace IDG_Top_Level_Programs_Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

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


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

如何在C#9 中使用顶级程序 (top-level)

顶级程序中的方法

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


System.Console.WriteLine(DisplayMessage("Joydip!"));
System.Console.Read();
static string DisplayMessage(string name)
{
    return "Hello, " + name;
}

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

如何在C#9 中使用顶级程序 (top-level)

顶级程序中的类

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


System.Console.WriteLine(new Author().DisplayMessage("Joydip!"));
System.Console.Read();
public class Author
{
    public string DisplayMessage(string name)
    {
        return "Hello, " + name;
    }
}

顶级程序的原理分析

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


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

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


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!");
    }
}

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

来源:https://mp.weixin.qq.com/s/DhL8CG9SpzNKSn1zVALozQ

标签:c#9,顶级程序,top-level
0
投稿

猜你喜欢

  • java 装饰模式(Decorator Pattern)详解及实例代码

    2023-09-07 03:13:08
  • Spring Boot集成MyBatis实现通用Mapper的配置及使用

    2023-07-03 18:17:10
  • 解决Map集合使用get方法返回null抛出空指针异常问题

    2023-11-25 00:14:00
  • java 正则,object中两个方法的使用(详解)

    2023-09-06 19:00:55
  • 详解C# TimeSpan 计算时间差(时间间隔)

    2021-07-12 11:00:10
  • SpringBoot日志框架之Log4j2快速入门与参数详解

    2023-11-15 21:17:59
  • Java定时器Timer简述

    2023-07-20 19:17:16
  • Java 方法签名详解及实例代码

    2022-02-04 05:56:06
  • Eclipse下Javassist正确使用方法代码解析

    2021-07-24 18:43:57
  • Java Web程序实现返回JSON字符串的方法总结

    2023-07-28 22:46:48
  • Java SpringBoot拦截器详解

    2021-11-01 15:29:37
  • Java中避免NullPointerException的方法总结

    2021-08-29 08:09:24
  • SpringBoot ApplicationContext接口深入分析

    2021-10-21 23:00:03
  • java开发微信公众号支付

    2021-10-24 16:02:40
  • Spring Boot Thymeleaf实现国际化的方法详解

    2023-11-24 06:01:01
  • C#中string.Empty和null的区别详解

    2023-05-19 16:01:45
  • 解析c#在未出现异常情况下查看当前调用堆栈的解决方法

    2023-05-18 02:54:04
  • 使用Jenkins来构建GIT+Maven项目的方法步骤

    2021-11-15 07:57:33
  • SpringBoot中@ConfigurationProperties注解实现配置绑定的三种方法

    2023-03-19 12:36:25
  • 总结C#网络编程中对于Cookie的设定要点

    2021-12-28 20:16:43
  • asp之家 软件编程 m.aspxhome.com