我最近更新了 Visual Studio,发现了顶级语句的这个新功能(对我来说这是新功能)。
据我了解,编译器完成了
Program
类和 Main
方法的定义,而无需您显式键入它。
这很有用,但是我在定义新方法时遇到了麻烦。我想要
Program
类中的方法。并用顶级声明来称呼它。这是一些示例代码:
Console.WriteLine("toplevel");
ThisShouldBeAMethodOfProgramClass();
public static void ThisShouldBeAMethodOfProgramClass()
{
Console.WriteLine("Static in Program class");
}
这给我带来了构建错误,因为公共静态修饰符无效。我认为它将其解释为
Main
中的局部函数。我可以删除修饰符,但这只是示例代码,我的真实代码有更多方法和类。
我该怎么做?我不应该为此使用顶级吗?
我希望这实际上与:
class Program
{
public static void Main(string[] args)
{
Console.WriteLine("toplevel");
ThisShouldBeAMethodOfProgramClass();
}
public static void ThisShouldBeAMethodOfProgramClass()
{
Console.WriteLine("Static in Program class");
}
}
您可以继续使用顶级语句并使用部分 Program 类附加其他成员。
using System;
Console.WriteLine("toplevel");
ThisShouldBeAMethodOfProgramClass();
public static partial class Program
{
public static void ThisShouldBeAMethodOfProgramClass()
{
Console.WriteLine("Static in Program class");
}
}
或者只是删除访问修饰符:没有访问修饰符的方法
using System;
Console.WriteLine("toplevel");
ThisShouldBeAMethodOfProgramClass();
static void ThisShouldBeAMethodOfProgramClass()
{
Console.WriteLine("Static in Program class");
}
更新:根据@shingo的评论,它不是一个没有访问修饰符的方法,它隐式地导致公共方法,而是一个不可见的Main()
方法范围中的
本地函数,它阻止您从以下位置调用它:文件外部(带有 顶级语句 的整个文件位于
Main()
内)。
所以以上所有内容与以下内容一致:
using System;
namespace Program
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("toplevel");
ThisShouldBeAMethodOfProgramClass();
static void ThisShouldBeAMethodOfProgramClass()
{
Console.WriteLine("Static in Program class");
}
}
}
}
顶级语句,例如入口点或 main() 函数,但它们之间有一些注释
您可以这样使用Top-level语句中的方法:
DisplayMessage();
static void DisplayMessage()
{
Console.WriteLine("Welcom in Top-Level Statement");
}
顶级语句可实现快速实验和初学者教程。