没有main方法的C#类

时间:2013-02-04 14:25:05

标签: c# class main

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

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

我尝试这样做,当我编译时(通过cmd使用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经验),但每当我尝试编译没有编译时,编译器告诉我我需要一个。

10 个答案:

答案 0 :(得分:22)


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

作为MSDN状态

  

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

     

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

C#不必使用Main方法。

答案 5 :(得分:1)

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

答案 6 :(得分:1)

只有一个方法,一个方法应该没问题。如果需要,可以在设置中在visual studio中设置启动对象。

答案 7 :(得分:1)

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

csc /reference:YourClassFileName.cs YourMainClassFileName.cs 要么 csc /r:YourClassFileName.cs YourMainClassFileName.cs

制作YourMainClassFileName.exe文件

答案 8 :(得分:0)

C#程序中的

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

答案 9 :(得分:0)

Main是必需的,但是C#9提供了这样的功能,您无需编写Main,而是将其用作Main。

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

using System;

Console.WriteLine("Hello World!");

允许任何语句。该程序必须在使用之后,文件中的任何类型或名称空间声明之前发生,并且您只能在一个文件中执行此操作,就像今天只有一个Main方法一样。

如果要返回状态码,可以执行此操作。如果您想等待事情,可以这样做。而且,如果您要访问命令行参数,则可以将args用作“魔术”参数。

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

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