.NET 6:如何在控制台应用启动时使用方法重载?
.NET 6: How to use method overloading in console app Startup?
.NET 6 在控制台应用程序启动 class 中提供样板文件删除功能。我尝试 运行 这个简单的测试代码:
Console.WriteLine("Hello, World!");
static void Test(int a, int b) { }
static void Test(int a, int b, int c) { }
我在最后一行遇到编译器错误:
Error CS0128 A local variable or function named 'Test' is already defined in this scope
我的问题是:如何在样板免费启动模式中使用方法重载?
这个
Console.WriteLine("Hello, World!");
static void Test(int a, int b) { }
编译为
[CompilerGenerated]
internal class Program
{
private static void <Main>$(string[] args)
{
Console.WriteLine("Hello, World!");
static void Test(int a, int b)
{
}
}
}
你看这个方法是本地方法,即在Main里面声明。不能有 2 个同名的局部函数。这也失败了;
见https://github.com/dotnet/docs/issues/17275
namespace Foo {
class Program {
// SerialPort port;
static void Main(string[] args) {
static void Test(int a) { };
static void Test(int a, int b) { };
}
}
出于同样的原因。新的简短 Main 语法有很多限制
你仍然可以创建一个class并把你想重载的所有方法都放进去。我就是这么做的。即使您可以添加访问修饰符,它也能正常工作,因为正如 所说,方法 after compilation 位于 main 方法
[CompilerGenerated]
internal class Program
{
private static void <Main>$(string[] args)
{
Console.WriteLine("Hello, World!");
static void Test(int a, int b)
{
}
}
}
所以访问修饰符也是一样的,但希望下一个版本的 .NET 不会再有这个问题,但现在你总是可以使用以前的版本 “主要”方法。
.NET 6 在控制台应用程序启动 class 中提供样板文件删除功能。我尝试 运行 这个简单的测试代码:
Console.WriteLine("Hello, World!");
static void Test(int a, int b) { }
static void Test(int a, int b, int c) { }
我在最后一行遇到编译器错误:
Error CS0128 A local variable or function named 'Test' is already defined in this scope
我的问题是:如何在样板免费启动模式中使用方法重载?
这个
Console.WriteLine("Hello, World!");
static void Test(int a, int b) { }
编译为
[CompilerGenerated]
internal class Program
{
private static void <Main>$(string[] args)
{
Console.WriteLine("Hello, World!");
static void Test(int a, int b)
{
}
}
}
你看这个方法是本地方法,即在Main里面声明。不能有 2 个同名的局部函数。这也失败了;
见https://github.com/dotnet/docs/issues/17275
namespace Foo {
class Program {
// SerialPort port;
static void Main(string[] args) {
static void Test(int a) { };
static void Test(int a, int b) { };
}
}
出于同样的原因。新的简短 Main 语法有很多限制
你仍然可以创建一个class并把你想重载的所有方法都放进去。我就是这么做的。即使您可以添加访问修饰符,它也能正常工作,因为正如
[CompilerGenerated] internal class Program { private static void <Main>$(string[] args) { Console.WriteLine("Hello, World!"); static void Test(int a, int b) { } } }
所以访问修饰符也是一样的,但希望下一个版本的 .NET 不会再有这个问题,但现在你总是可以使用以前的版本 “主要”方法。