【问题标题】:C# class without main method没有main方法的C#类
【发布时间】:2013-01-19 06:31:03
【问题描述】:

我正在学习 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 经验),但每当我尝试在没有 Java 的情况下进行编译时,编译器都会告诉我我需要一个。

【问题讨论】:

  • 如果你正在学习 C#,你最好坚持使用 Visual Studio。通过命令行编译本身就是另一个主题,您最好先熟悉语言和框架,然后再尝试在命令行中操作编译。
  • 我认为Class 是保留字。另外您对stuff(); 有什么期望?如果这是示例代码,您应该发布您的真实代码。
  • @bluefire - stuff();对您的代码 stuff() 的引用无效;正在调用一个方法,而您已将其声明为整数!
  • 请不要完全误解这个问题并抱怨示例代码的语义没有意义。
  • @Brad Class 不是保留关键字。 class 是..

标签: c# class main


【解决方案1】:

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

【讨论】:

    【解决方案2】:


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

    作为 MSDN 国家

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

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


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

    main方法的签名是:static void Main(string[] args) or static void Main() or static int Main(string[] args) or 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();
        }
    }
    

    【讨论】:

    • static int Main(string[] args)
    • 我不是反对者(事实上,我赞成),但我建议把你的话拼写出来。即,不要使用“u”,而是拼写“you”。即使您不关心正确的语法,这也会产生更易于搜索的答案。
    • @CharlieKilian - 注意到先生!
    【解决方案3】:

    没有 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 文件

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

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

              C# library 不一定要有 Main 方法。

              【讨论】:

                【解决方案9】:

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

                【讨论】:

                  【解决方案10】:

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

                  【讨论】:

                    猜你喜欢
                    • 2021-12-27
                    • 2014-04-21
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2018-03-29
                    相关资源
                    最近更新 更多