C#语言的顶级(Top-level)语句

1.顶级语句原理

从 C# 9 开始,无需在应用程序项目中显式包含 Main 方法。

顶级语句的原理是把Program类中Main方法内的内容抽取出来放到文件的顶层,是一种隐式的入口点方式,顶级语句隐式位于全局命名空间中。具体顺序见下面:

//语句顺序
using 语句;

顶级语句;

类(必须位于顶级语句之后);

命名空间(必须位于顶级语句之后);
//C# 9.0(包含)之后
// A skeleton of a C# program
using System;

// Your program starts here:
Console.WriteLine("Hello world!");

namespace YourNamespace
{
    class YourClass
    {
    }

    struct YourStruct
    {
    }

    interface IYourInterface
    {
    }

    delegate int YourDelegate();

    enum YourEnum
    {
    }

    namespace YourNestedNamespace
    {
        struct YourStruct
        {
        }
    }
}
//C# 9.0(不包含)之前
// A skeleton of a C# program
using System;
namespace YourNamespace
{
    class YourClass
    {
    }

    struct YourStruct
    {
    }

    interface IYourInterface
    {
    }

    delegate int YourDelegate();

    enum YourEnum
    {
    }

    namespace YourNestedNamespace
    {
        struct YourStruct
        {
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            //Your program starts here...
            Console.WriteLine("Hello world!");
        }
    }
}

一般情况下,一个项目只能有一个包含Main方法入口点的文件,因此一个项目也只能有一个包含顶级语句的文件。

可以显式编写 Main 方法,但它不能作为入口点。编译器将发出以下警告:CS7022:程序的入口点是全局代码;忽略“Main()”入口点。

2.编译器

编译器将为顶级语句生成类 和 入口点方法,为了方便起见,在此使用方法名称 Main,所以也支持类和Main方法同等的内容。

2.1args参数

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

2.2隐式入口点方法签名

顶级代码包含隐式 Main 签名
await 和 returnstatic async Task<int> Main(string[] args)
awaitstatic async Task Main(string[] args)
returnstatic int Main(string[] args)
无 await 或 returnstatic void Main(string[] args)

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/experience/csharpe/15212.html

(2)
上一篇 2022年6月5日 23:46
下一篇 2022年6月8日 21:31

相关推荐

  • C#语言的GetType()方法

    使用方法 GetType()(被 Object 基类的所有子类型继承)以获取变量类型:

    C#经验 2021年5月5日
    03650
  • C#语言的发展介绍

    C#的发音为“See Sharp”,“#”读作“sharp”(/ ʃɑːp /),命名启发于音乐上的音名“C♯”,在音乐中“C♯”表示C升半音,为比C高一点的音节,且“#”形似4个加号,微软借助这样的命名,以表示C#在一些语言特性方面对C++的提升的意思。 由于显示器(标准字体、浏览器等)的技术限制,且大部分的键盘布局…

    C#经验 2021年1月1日
    03230
  • 托管(Managed)代码、非托管(Unmanaged)代码、不安全(Unsafe)代码的区别

    托管(Managed)代码:在公共语言运行时 (CLR) 控制下运行的代码。 非托管(Unmanaged)代码:不在公共语言运行时 (CLR)控制下运行的代码。 例如,COM、COM+、C++ 组件、ActiveX 组件和 Microsoft Windows API 都是非托管代码。 不安全(Unsafe)代码:不安全…

    C#经验 2022年1月10日
    01960

发表评论

登录后才能评论