12

我正在学习 C#,我对它很陌生,所以请原谅我这个看似愚蠢的问题。我有一些 Java 经验,我注意到 C# 程序main()在其主类中也需要一个方法。

如果我想创建一个不是主类的类,即我导入到主类中的类怎么办?

我试图这样做,当我编译(通过 cmd using csc File.cs)时,编译器说它将生成的 .exe 没有main()方法。这是否意味着我错了,每个类都需要一个main()方法,或者我错误地编译它?

也许问题出在代码中(因为我依赖于我对 Java 语法的了解),如下所示:

public class Class
{
    int stuff;
    public Class(int stuff)
    {
        this.stuff = stuff;
        stuff();
    }
    public void method()
    {
        stuff();
    }
}

编辑:恐怕这被严重误解了。我不是在问文件是否需要 main 方法,而是在问我如何将这个类导入另一个类,因为我意识到如果我要这样做,我就不能有一个 main 方法(正如我所说,我有一些 Java 经验),但是每当我尝试在没有 Java 的情况下进行编译时,编译器都会告诉我我需要一个。

4

10 回答 10

25

##并非所有类都需要`Main`方法。

正如 MSDN 所说

Main 方法是 C# 控制台应用程序或 Windows 应用程序的入口点。(库和服务不需要 Main 方法作为入口点。)。启动应用程序时,Main 方法是调用的第一个方法。

C# 程序中只能有一个入口点。如果您有多个具有 Main 方法的类,则必须使用 /main 编译器选项来编译程序,以指定将哪个 Main 方法用作入口点。


只有一个类需要保留Main方法,即作为应用程序入口点的类。

主要方法的签名是:static void Main(string[] args)static void Main()static int Main(string[] args)static int Main()

查看此链接了解更多详情Main() and Command-Line Arguments (C# Programming Guide:)


对于您上面的示例:

public class MyClassName // changed the class name, avoid using the reserved keyword :P
{
    int stuff;
    public MyClassName(int stuff)  // is the constructor
    {
        this.stuff = stuff;
    }
    public void method()
    {
        stuff = 1;
    }
}

如果需要使用该类,可以使用 main 方法创建一个静态类:

class ProgramEntry
{
    static void Main(string[] args)
    {
        MyClassName classInstance = new MyClassName(2);
        classInstance.method();
    }
}

C# 9开始,引入了没有 Main 方法的程序选项。无需声明 Main 方法,您现在可以直接在类外部的文件中编写代码。有关更多详细信息,请参阅顶级语句 - 没有 Main 方法的程序

于 2013-02-04T14:26:26.340 回答
1

在这种情况下,您的代码中至少需要一个类以及其中的Main方法。其他类不需要该Main方法。

于 2013-02-04T14:27:52.783 回答
1

main构建可执行程序集 (.exe) 时只需要一个方法,并且只在一个类中需要它。此方法将是执行开始的默认入口点。main当您将代码构建为类库 (.dll) 时,您不需要方法。

于 2013-02-04T14:28:26.520 回答
1

尝试/t:library在编译器中使用 switch。默认情况下,它会尝试创建一个.exe,当然,它需要一个入口点(即main方法)。如果你编译成 a.dll你就不需要了。

但是正如 HighCore 建议的那样,如果您正在学习,只需使用 Visual Studio(如果您还没有下载免费版本之一)并让它担心编译器标志。

于 2013-02-04T14:28:45.537 回答
1

C#应用程序必须至少有一个具有 Main 方法的类,以便可以从它开始执行。应用程序可以有很多类,但只需要一个类和一个 Main 方法。

C#不必具有 Main 方法。

于 2013-02-04T14:30:08.987 回答
1

如果这是一个控制台应用程序,您需要一个 Main 方法开始。否则(例如 Web 应用程序),您不需要一个。

于 2013-02-04T14:30:23.567 回答
1

只有一个类和一种方法应该没问题。如果需要,可以在设置中设置 Visual Studio 中的启动对象。

于 2013-02-04T15:36:41.397 回答
1

没有 Main() 的 C# 类意味着,您可以将其编译为库 (.dll) csc /target:library YourClassFileName.cs 或 csc /t:library YourClassFileName.cs 使其成为 YourClassFileName.dll 文件,然后您可以使用它在另一个具有 Main() 方法(入口点)的类文件中

csc /reference:YourClassFileName.cs YourMainClassFileName.cs 或 csc /r:YourClassFileName.cs YourMainClassFileName.cs

制作 YourMainClassFileName.exe 文件

于 2015-07-25T19:45:32.167 回答
0

static void main(string[] args) C# 程序中的方法是执行的起点。如果您尝试编译单个 C# 文件,编译器会找到此方法来开始执行。您不需要在用作模型的类中创建方法,但您必须在控制台程序、WinForms 等中使用此方法...

于 2013-02-04T14:27:49.707 回答
0

Main 是必需的,但 C#9 具有此功能,因此您不会编写 Main,但它将充当 Main。

在 C# 9.0 中,您可以选择在顶层编写主程序:

using System;

Console.WriteLine("Hello World!");

允许任何陈述。该程序必须在文件中的 usings 之后和任何类型或命名空间声明之前发生,并且您只能在一个文件中执行此操作,就像您现在只能有一个 Main 方法一样。

如果你想返回一个状态码,你可以这样做。如果你想等待事情,你可以这样做。如果你想访问命令行参数,可以使用 args 作为“神奇”参数。

局部函数是一种语句形式,在顶层程序中也是允许的。从顶级语句部分之外的任何地方调用它们都是错误的。

参考https ://devblogs.microsoft.com/dotnet/welcome-to-c-9-0/#top-level-programs

于 2020-06-14T13:54:58.630 回答