添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
气宇轩昂的茄子  ·  Python ...·  1 月前    · 
路过的泡面  ·  wffger开源笔记 - OSCHINA ...·  1 年前    · 
打酱油的手套  ·  sql 四舍五入 ...·  1 年前    · 
一身肌肉的酱牛肉  ·  ASP.NET Core Razor ...·  2 年前    · 

从C#9开始,无需在控制台应用程序中显示包含Main方法,相反可以使用顶级语句功能最大程度的减少样板代码的代码量,在这种人情况下,编译器将为应用程序生成类和Main方法入口点

下面是Program.cs文件,它是一个完成的C#程序

Console.WriteLine("Hello World!");

借助顶级语句,可以为小实用程序(如 Azure function 和 GitHub Action)编写简单的程序,它们还使初次接触C#程序的程序员能够跟轻松的开始学习和编写代码

只能有一个顶级文件

一个应用程序只能有一个入口点,一个项目只能有一个包含顶级语句的问价,在项目中多个文件中放置顶级语句会导致编译错误

没有其他入口点

可以显示编写 Main 方法,但它不能作为入口点,编译器将发出警告

在具有顶级语句的项目中,不能使用 -main 编译器选项来选择入口点,即时该项目具有一个或多个Main方法

using 指令

如果包含 using 指令,咋它们必须首先被声明,

using System.Text;
StringBuilder builder = new();
builder.AppendLine("Hello");
builder.AppendLine("World!");
Console.WriteLine(builder.ToString());

全局命名空间

顶级语句位于全局命名空间中

命名空间和类型定义

具有顶级语句的文件还可以包含命名空间和类型定义,但它们必须位于顶级语句之后

MyClass.TestMethod();
MyNamespace.MyClass.MyMethod();
public class MyClass
    public static void TestMethod()
        Console.WriteLine("Hello World!");
namespace MyNamespace
    class MyClass
        public static void MyMethod()
            Console.WriteLine("Hello World from MyNamespace.MyClass.MyMethod!");

顶级语可以引用 args 变量来访问输入的任何命令行参数,args 变量永远不会为null,但如果未提供任何命令行参数,则 length 为0 ,例如

if (args.Length > 0)
    foreach (var arg in args)
        Console.WriteLine($"Argument={arg}");
    Console.WriteLine("No arguments");

await 可以通过使用 await 来调用异步方法

Console.Write("Hello ");
await Task.Delay(5000);
Console.WriteLine("World!");

进程的退出代码

若要在应用程序结束时返回 int 值,请像在 Main 方法中返回 int 那样使用 return 语句。 例如:

string? s = Console.ReadLine();
int returnValue = int.Parse(s ?? "-1");
return returnValue;

隐式入口点方法

编译器会生成一个方法,作为具有顶级语句的项目的程序入口点,此方法的名称实际上并不是Main,而是代码无法直接引用的实现细节,方法的签名取决于顶级语句是否包含 await 关键字还是return 语句,下表显示了方法签名的外观,为了方便起见,在表中使用了方法名称 Main

顶级代码包含隐式 Main 签名
awaitreturnstatic async Task<int> Main(string[] args)
awaitstatic async Task Main(string[] args)
returnstatic int Main(string[] args)
awaitreturnstatic void Main(string[] args)
1 背景与动机 通常,如果只想用C#在控制台上打印一行“Hello World!”,这可不是Console.WriteLine(“Hello World!”);一条语句就可以搞定的,还涉及到其他必要基础代码(如定义类和入口函数Main),例如下面: using System; class Program static void Main() Console.WriteLine(Hello World!); 就打印一句“Hello World!”,就这么多代码。这个不仅对于初学者来说麻烦,而且使得代码凌乱,并且增加了缩进层级。为了解决这些问题,就提出了顶 3.顶级语句中不仅可以写基本的表达式,也可以在顶级语句中定义方法,然后调用它(局部方法,方法内部定义的方法)。具有顶级语句的文件可以包含命名空间和类型定义,但它们必须位于顶级语句之后。5.在顶级语句中可以使用return返回一个int类型返回值。6.顶级语句隐式位于全局命名空间中(可以直接创建对象)(2)顶级语句:编译到Main方法中的代码。(3)类/命名空间(必须位于顶级语句之后)4.在顶级语句中可以使用args来获取命令。(1)using语句:引入命名空间。2.只能有一个顶级语句文件。 从 C# 9 开始,无需在控制台应用程序项目中显式包含 方法。 相反,可以使用顶级语句功能最大程度地减少必须编写的代码。 在这种情况下,编译器将为应用程序生成类和 方法入口点。下面是一个 Program.cs 文件看,它是 C# 10 中的一个完整 C# 程序: 注意点:参考:Microsoft C# 顶级语句... 顶级语句这个名字看起来不是那么直观,或许它的曾用名更好一些:Simple Programs,简单程序。 想必大家都知道,即使是最简单的 C# 程序,也会有一定量的繁文缛节,因为最少也需要一个 Main 方法。这似乎妨碍了语言的学习和程序的清晰度。因此,这个特性的最主要目的就是为了初学者和代码的清晰度,让书写 C# 程序可以变得更轻松。 语法 Spec 如下,允许在命名空间的声明前面,添加一组语句,且只允许有一个编译单元(可以认为是一个源文件 1 背景与动机 通常,如果只想用C#在控制台上打印一行“Hello World!”,这可不是Console.WriteLine("Hello World!");一条语句就可以搞定的,还涉及到其他必要基础代码(如定义类和入口函数Main),例如下面: using System; class Program static void Main() Console.WriteLine("Hello World!"); 就打印一句“Hello World!”. WebApi 的套路还是很直白的,入门还是比较简单。一个顶级文件Program.cs负责初始化配置工作,再配上几个控制器,就能写出微服务了。今天介绍两个小技巧:1 如何将变量注入到控制器2 配置文件的读取。 以下是C#中最有价值的10个语法糖:自动实现属性使用自动实现属性,可以简化属性的定义和实现,不需要显式地编写字段和访问器。例如:publicstringName{get;set;}空值合并运算符使用空值合并运算符,可以简化判断空值的代码。例如:stringname=null; stringdefaultName="John"; stringresult=name??... Program.cs文件在我们创建ASP.Net Core项目时自动生成。 这段代码中,通过使用CreateDefaultBuilder()函数创建并运行了一个虚拟网站托管主机WebHost。我们再看看CreateDefaultBuilder()函数具体做了哪些事情 加载主机和应用程序的配置信息 配置日志记录 设置Web服务器 设置Asp.Net Core应用程序的托管形式 根据顶级语句语法,顶级语句文件中存在隐式 using 指令, 但如果我们需要在 Program.cs 文件中额外引入一些命名空间也是可以的,using 语句需要在文件的最前面,也可以定义方法或者类,只不过需要在顶级语句的后面,也可以使用异步方法。从代码中可以看到,在对主机进行配置的时候,使用到了 Startup 类,在 .NET 6 之前的版本,Startup 类承担应用的启动任务,是应用配置的主要地方。○ 该方法内中间件的注册顺序与代码的书写顺序是一致的,先注册的先执行,后注册的后执行。