我正在学习C#,而且我对它很陌生,所以请原谅我这个看似愚蠢的问题。我在Java方面有一些经验,我注意到C#程序在其主类中也需要一个main()
方法。
如果我想创建一个不是主类的类,即导入到主类中的类,该怎么办?
我尝试过这样做,当我编译(通过使用csc File.cs
的cmd)时,编译器说它将生成的.exe没有main()
方法。这是否意味着我错了,每个类都需要一个main()
方法,或者我编译错误了?
也许问题出在代码中(因为我依赖于Java语法知识),它看起来像这样:
public class Class
{
int stuff;
public Class(int stuff)
{
this.stuff = stuff;
stuff();
}
public void method()
{
stuff();
}
}
编辑:恐怕这被误解了。我不是问这个文件是否需要main方法,而是问我如何将这个类导入到另一个类中,因为我意识到如果要这样做,我就不能有main(正如我所说,我有一些Java经验),但每当我试图在没有main方法的情况下编译时,编译器告诉我需要main方法。
##并非所有类都需要"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方法的程序。
在这种情况下,您的代码中至少需要一个包含Main
方法的类。其他类不需要Main
方法。
C#应用程序必须至少有一个带有Main方法的类,这样才能从它开始执行。应用程序可以有很多类,但只需要一个带有一个Main方法的类别。
C#库不必有Main方法。
如果这是一个控制台应用程序,则需要从Main方法开始。否则(例如web应用程序),您就不需要了。
尝试在编译器中使用/t:library
开关。默认情况下,它会尝试生成一个.exe
,当然,它需要一个入口点(即main
方法)。如果您编译到.dll
,则不需要它。
但正如HighCore建议的那样,如果你正在学习,只需使用Visual Studio(如果你还没有下载免费版本,请下载其中一个),让它担心编译器标志。
构建可执行程序集(.exe)时只需要main
方法,并且只需要在一个类中使用它。此方法将是开始执行的默认入口点。当您将代码构建为类库(.dll)时,不需要main
方法。
只有一个类和一个方法就可以了。如果需要,可以在visual studio中的设置中设置启动对象。
C#类不带Main()意味着,您可以将其编译为库(.dll)csc/target:library YourClassFileName.cs或csc/t:library Your ClassFileName.cs将其作为YourClassFileName.dll文件,然后您可以在另一个具有Main()方法(入口点)的类文件中使用它
csc/reference:YourClassFileName.cs YourMainClassFileName.chs或csc/r:YourClassFileName.cs YourMainClassFileName.chs
使YourMainClassFileName.exe文件
static void main(string[] args)
方法在C#程序中是执行的起点。如果你试图编译一个C#文件,编译器会找到这个方法来开始执行。您不需要在用作模型的类中创建方法,但必须在控制台程序、WinForms等上使用此方法。
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-级别程序