首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当使用C# 9顶级语句时,如何在Main范围之外添加代码?

当使用C# 9顶级语句时,如何在Main范围之外添加代码?
EN

Stack Overflow用户
提问于 2021-12-22 17:48:07
回答 2查看 2.3K关注 0票数 8

我的理解是,直接将代码写到旧的"static void Main(string[] args)“中,而不需要显示上面的内容,这是类似的。

但是,我过去常常在类程序中声明我的变量可以从其他类中访问(抱歉,如果不是最佳实践,我自己学习了C#,只要它工作,我对我的代码很满意)。见下面的例子:

代码语言:javascript
复制
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,我似乎只能在主部分中声明变量,那么如何声明它们才能从其他类访问它们呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-22 18:04:21

对于.Net 5:

当您使用顶级课程 9的C#特性时,您就放弃了将任何东西放置在Main方法范围之外的能力。主方法或Program类上的字段、属性、命名空间设置、类名更改等都不再可用(唯一的例外是使用using行“导入”名称空间)。

如果这个限制对你不起作用,就不要使用这个特性。

对于.Net 6和更高版本,请使用东格斯的回答

票数 9
EN

Stack Overflow用户

发布于 2022-02-09 23:28:41

我认为目前接受的答案是不正确的,如果您在Program.cs中抛出部分类签名,您肯定可以添加诸如静态作用域字段和属性这样的内容:

代码语言:javascript
复制
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中的任何其他代码都不会输出:

代码语言:javascript
复制
/home/dongus/bazinga/bin/Debug/net6.0/bazinga
hello world
value

Process finished with exit code 0.

我使用此方法将[ExcludeFromCodeCoverage]属性应用于项目的Program.cs文件。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70453145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档