使用 C# 9 顶级语句时,如何在 Main 范围之外添加代码?
How do I add code outside the scope of Main when using C# 9 Top Level Statements?
我的理解是类似直接写代码到旧的“static void Main(string[] args)
”里面,不需要显示上面的东西
但是,我曾经在 class 程序中声明我的变量,以便其他 classes 可以访问它们(如果不是最佳实践,我深表歉意,我自己学习了 C#,只要它有效,我对我的代码很满意)。
请参阅下面的示例:
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.IO;
namespace myNameSpace
{
class Program
{
//variables declaration
public static string abc = "abc";
public static int xyz = 1;
static void Main(string[] args)
{
//code goes here
}
}
}
使用 C# 9,我似乎只能在 Main 部分声明变量,那么我如何声明它们才能从其他 classes 访问它们?
当您使用 C# 9 的 Top-Level Program 功能时,您将放弃将任何内容置于 Main
方法范围之外的能力。 Main 方法或程序 class 上的字段、属性、特性、设置命名空间等都不再可用(唯一的例外是使用 using
行“导入”命名空间)。
如果该限制对您不起作用,请不要使用该功能。
我认为答案不正确,如果您在 Program.cs
中使用部分 class 签名,您肯定可以添加诸如 static-scoped 字段和属性之类的内容:
var customAttributes = (CustomAttribute[])typeof(Program).GetCustomAttributes(typeof(CustomAttribute), true);
Console.WriteLine(customAttributes[0].SomePropery);
Console.WriteLine(MyField);
[Custom(SomePropery = "hello world")]
public partial class Program
{
private const string MyField = "value";
}
class CustomAttribute : Attribute
{
public string SomePropery { get; set; }
}
上面的代码和 Program.cs
中的任何其他代码都将输出:
/home/dongus/bazinga/bin/Debug/net6.0/bazinga
hello world
value
Process finished with exit code 0.
我使用此方法将 [ExcludeFromCodeCoverage]
属性应用于我的项目的 Program.cs
文件
我的理解是类似直接写代码到旧的“static void Main(string[] args)
”里面,不需要显示上面的东西
但是,我曾经在 class 程序中声明我的变量,以便其他 classes 可以访问它们(如果不是最佳实践,我深表歉意,我自己学习了 C#,只要它有效,我对我的代码很满意)。 请参阅下面的示例:
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.IO;
namespace myNameSpace
{
class Program
{
//variables declaration
public static string abc = "abc";
public static int xyz = 1;
static void Main(string[] args)
{
//code goes here
}
}
}
使用 C# 9,我似乎只能在 Main 部分声明变量,那么我如何声明它们才能从其他 classes 访问它们?
当您使用 C# 9 的 Top-Level Program 功能时,您将放弃将任何内容置于 Main
方法范围之外的能力。 Main 方法或程序 class 上的字段、属性、特性、设置命名空间等都不再可用(唯一的例外是使用 using
行“导入”命名空间)。
如果该限制对您不起作用,请不要使用该功能。
我认为答案不正确,如果您在 Program.cs
中使用部分 class 签名,您肯定可以添加诸如 static-scoped 字段和属性之类的内容:
var customAttributes = (CustomAttribute[])typeof(Program).GetCustomAttributes(typeof(CustomAttribute), true);
Console.WriteLine(customAttributes[0].SomePropery);
Console.WriteLine(MyField);
[Custom(SomePropery = "hello world")]
public partial class Program
{
private const string MyField = "value";
}
class CustomAttribute : Attribute
{
public string SomePropery { get; set; }
}
上面的代码和 Program.cs
中的任何其他代码都将输出:
/home/dongus/bazinga/bin/Debug/net6.0/bazinga
hello world
value
Process finished with exit code 0.
我使用此方法将 [ExcludeFromCodeCoverage]
属性应用于我的项目的 Program.cs
文件