如何定义顶级语句之后的方法

问题描述 投票:0回答:3

我最近更新了 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");
    }
}
c# methods toplevel-statement
3个回答
19
投票

您可以继续使用顶级语句并使用部分 Program 类附加其他成员。

using System;
Console.WriteLine("toplevel");
ThisShouldBeAMethodOfProgramClass();

public static partial class Program
{
    public static void ThisShouldBeAMethodOfProgramClass()
    {
        Console.WriteLine("Static in Program class");
    }
}

7
投票

或者只是删除访问修饰符:没有访问修饰符的方法

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");
            }
        }
    }
}

0
投票

顶级语句,例如入口点或 main() 函数,但它们之间有一些注释

您可以这样使用Top-level语句中的方法:

DisplayMessage();

static void DisplayMessage()
{
    Console.WriteLine("Welcom in Top-Level Statement");
}

顶级语句可实现快速实验和初学者教程。

© www.soinside.com 2019 - 2024. All rights reserved.