如何在 Console App .NET 6.0 的 Program.cs 中全局声明静态实例

How to declare static instance globally in Program.cs of Console App .NET 6.0

我已经创建了一个控制台应用程序 .NET 6.0 来学习单例模式。 但我观察到 Program.cs 文件发生了重大变化。

namespaceclassMain 方法已从 .NET 6.0 中的 program.cs 中删除。

我相信将在 program.cs 中编写的代码将被视为在 Main 方法中。 但是我想创建两个使用全局初始化实例的静态方法,但我做不到。

通过如下声明实例:

它给出编译错误:

CS0106 The modifier 'static' is not valid for this item

在如下静态方法中使用实例时:

它给出编译错误:

CS8421: A static local function cannot contain a reference to 'tableservers1'.

这里是program.cs的全部代码:

using SingletonApp;

static TableServers tableservers1 = TableServers.GetInstance();
static TableServers tableservers2 = TableServers.GetInstance();

Console.WriteLine("Hello, World!");

for (int i = 0; i < 5; i++)
{
    Host1();
    Host2();
}
Console.WriteLine();


static void Host1()
{
    Console.WriteLine("Host1 Next server is: " + tableservers1.GetNextServer());
}

static void Host2()
{
    Console.WriteLine("Host2 Next server is: " + tableservers2.GetNextServer());
}

请有人解释我们如何使用这个新的缩小版 program.cs,特别是使用全局实例和变量以及创建方法。

一样,从 C# 10 开始,您可以通过引入 public partial class Program(在顶级语句文件的底部或单独的文件中)来实现此目的:

// rest of your top-level statement code 
// ...
public partial class Program 
{
    static TableServers tableservers1 = TableServers.GetInstance();
    static TableServers tableservers2 = TableServers.GetInstance();
}

但我认为切换到“旧样式”Program class 或将静态字段移动到另一个 class 将是更好的选择。