Visual Studio 2022版的.NET 7.0支持C# 11,此版本的C#简化许多,本节将进行说明,这也是本书后文主要的C#程序结构。
请参考1-9-1节创建方案ch2_3,此方案的项目名称是proj2_3,程序名称是Program.cs,可以得到的.NET 7.0的C#语言结构如下所示。
从上面可以看到程序代码简化许多,这类程序代码称为顶级语句,这类程序代码相当于是脱掉Program类和Main()方法的外壳,省略了外层直接撰写程序代码,所以在顶级语句下,C#的程序结构如下所示。
上述1或3是可选选项,2则是必选的,如果将2和3的顺序颠倒,则编译时会出现错误。本书第1章~第28章所述内容都采用了顶级语句,所以1和3大都省略了。对于上述程序Program.cs而言,下列语句就是顶级语句。
旧版的C#程序仍可以在C# 11.0内执行。
第3~第28章我们所设计的程序,就称为顶级语句。
项目默认的程序名称是Program.cs,cs是C#默认的程序扩展名。
2-2-1节中的“//”符号是程序的批注,其右边的字符串不会被编译,程序第1行主要是告知读者按Ctrl键并单击此超链接可以进入微软公司的说明网页。
C语言的程序批注“/*…*/”在C#仍可以使用。
/*…*/批注还有一个好处是可以进行多列批注,当有“/*”符号时,此区间的内容会被认为是批注,直到“*/”符号,整个批注才算结束,可以参考以下实例。
上述/*…*/中的内容都是批注。
在C# 8.0(含)以前,C#默认需要使用using引用类到命名空间,C# 11.0(9.0起)表面上是省略了此部分,但其实没有省略,只是用隐含方式存在,如果单击程序左上方的图标
(此图标称为全局using指令),就可以看到C# 11.0隐式引用的类。
从上述可以看到隐式using引用命名空间的声明,已经是用文件方式存在,此文件名称是proj2_3.GlobalUsings.g.cs,以下是此文件所在文件夹。
如果在要在Visual Studio显示此文件内容,步骤如下。
1.在解决方案资源管理器窗口单击工具栏的显示所有文件图标
。
2.请单击展开obj。
3.请单击展开Debug。
4.请单击展开net7.0。
5.此时可以看到proj2_3.GlobalUsing.g.cs文件,请单击此文件。
从上面我们看到C# 10虽然简化了程序的设计,但只是用隐性全局global using方式,将常用类引用到命名空间,这个动作会在程序编译的时候处理。如果我们要在程序中使用using引用命名空间,需要将此using写在程序前面。
具体如下所示:
Console是System命名空间的Console类,所以也可以写成System.Console.WriteLine()。
程序设计时,如果所使用的类的命名空间在默认环境中没有引用,则需使用using先引用此命名空间。
在2-1-5节提到,C#是从C/C++语言衍生而来的,C/C++语言的入口点是Main()函数,但是在.NET 7.0环境下新版的C#默认程序同时也省略了Main()。
其实从C# 9.0开始就已经不需要在控制台的应用程序内写Main()方法了。
对于小型的应用程序,可以将读者要写的程序代码降到最低,在这种情况下,编译程序会产生程序的应用类和Main()方法的进入点。读者可能会感到奇怪,那如何定义程序的入口点?微软的官方文件指明,一个项目必须有一个最上层文件,这通常是Program.cs,所以程序的入口点就是此文件的开头指令。这相当于程序编译时会依据Program.cs的内容自动产生应用类,同时由此程序产生入口点。
在Visual Studio窗口程序代码左边可以看到图标
,如下所示。
请单击再选择“转换为‘Program.Main’样式程序”,可以看到原始的C#程序样貌。
程序创建完成后,执行方式和2-1-7节步骤相同。可以同时按Ctrl+F5或是执行“调试”→“开始执行(不调试)”来执行此方案。在proj2_3项目的Program.cs程序第2行已经有默认的Console.WriteLine()的输出,执行此方案后可以得到以下结果。
建议使用“开始执行(不调试)”指令执行C#方案,可以节省调试的时间。