簡體   English   中英

沒有main方法的C#類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM