[英]C# class without main method
我正在学习 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 经验),但是每当我尝试在没有一个的情况下进行编译时,编译器都会告诉我我需要一个。
Main
方法。作为 MSDN 状态
Main 方法是 C# 控制台应用程序或 Windows 应用程序的入口点。 (库和服务不需要 Main 方法作为入口点。)。 当应用程序启动时,Main 方法是第一个被调用的方法。
C# 程序中只能有一个入口点。 如果您有多个具有 Main 方法的类,则必须使用 /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();
}
}
在这种情况下,您的代码中至少需要一个包含Main
方法的类。 其他类不需要Main
方法。
构建可执行程序集(.exe)时只需要一个main
方法,并且只在一个类中需要它。 此方法将是执行开始的默认入口点。 将代码构建为类库 (.dll) 时,不需要main
方法。
尝试在编译器中使用/t:library
开关。 默认情况下,它会尝试创建一个.exe
,当然,它需要一个入口点(即main
方法)。 如果您编译为.dll
,则不需要它。
但正如 HighCore 所建议的,如果您正在学习,只需使用 Visual Studio(如果您还没有,请下载免费版本之一)并让它担心编译器标志。
C#应用程序必须至少有一个带有 Main 方法的类,以便可以从它开始执行。 应用程序可以有很多类,但只需要一个只有一个 Main 方法的类。
C#库不必具有 Main 方法。
如果这是一个控制台应用程序,您需要一个 Main 方法来开始。 否则(例如 Web 应用程序),您不需要一个。
只有一个具有一种方法的类应该没问题。 如果需要,您可以在设置中的 Visual Studio 中设置启动对象。
没有 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 文件
C# 程序中的static void main(string[] args)
方法是执行的起点。 如果您尝试编译单个 C# 文件,编译器将找到此方法开始执行。 您不需要在用作模型的类中创建该方法,但是您必须在控制台程序、WinForms 等上使用此方法...
Main 是必需的,但 C#9 具有此功能,因此您不会编写 Main,但它将充当 Main。
在 C# 9.0 中,您可以选择在顶层编写主程序:
using System;
Console.WriteLine("Hello World!");
任何声明都是允许的。 该程序必须发生在 using 之后和文件中的任何类型或命名空间声明之前,并且您只能在一个文件中执行此操作,就像今天只能有一个 Main 方法一样。
如果你想返回一个状态码,你可以这样做。 如果你想等待事情,你可以这样做。 如果您想访问命令行参数,args 可用作“魔术”参数。
局部函数是一种语句形式,也允许在顶级程序中使用。 从顶级语句部分之外的任何地方调用它们都是错误的。
参考: https : //devblogs.microsoft.com/dotnet/welcome-to-c-9-0/#top-level-programs
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.