12

私は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を使用せずにコンパイルしようとすると、コンパイラからJavaが必要であると通知されます。

4

10 に答える 10

25

##すべてのクラスに Main メソッドが必要なわけではありません。

MSDN の状態として

Main メソッドは、C# コンソール アプリケーションまたは Windows アプリケーションのエントリ ポイントです。(ライブラリとサービスは、エントリ ポイントとして Main メソッドを必要としません。) アプリケーションが開始されると、Main メソッドが最初に呼び出されるメソッドになります。

C# プログラムには、1 つのエントリ ポイントしか存在できません。Main メソッドを持つクラスが複数ある場合は、/main コンパイラ オプションを使用してプログラムをコンパイルし、エントリ ポイントとして使用する Main メソッドを指定する必要があります。


メソッドを保持する必要があるMainのは、アプリケーションのエントリ ポイントとして機能するクラスの 1 つだけです。

メイン メソッドのシグネチャは :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 メソッドを使用しないプログラムを参照してください。

于 2013-02-04T14:26:26.340 に答える
1

1 つのメソッドを持つ 1 つのクラスだけで問題ありません。必要に応じて、Visual Studio の設定でスタートアップ オブジェクトを設定できます。

于 2013-02-04T15:36:41.397 に答える
1

mainメソッドは、実行可能アセンブリ (.exe) をビルドするときにのみ必要であり、1 つのクラスでのみ必要です。このメソッドは、実行が開始されるデフォルトのエントリ ポイントになります。mainコードをクラス ライブラリ (.dll) としてビルドする場合、メソッドは必要ありません。

于 2013-02-04T14:28:26.520 に答える
1

/t:libraryコンパイラで switch を使用してみてください。デフォルトでは.exe、もちろんエントリ ポイント (つまりmainメソッド) が必要な を作成しようとします。にコンパイルする場合、.dllそれは必要ありません。

ただし、HighCore が示唆しているように、学習している場合は、Visual Studio を使用して (まだダウンロードしていない場合は無料バージョンのいずれかをダウンロードしてください)、コンパイラ フラグについて心配させてください。

于 2013-02-04T14:28:45.537 に答える
1

Mainこのシナリオでは、メソッドを含むコード内に少なくとも 1 つのクラスが必要です。Main他のクラスはメソッドを必要としません。

于 2013-02-04T14:27:52.783 に答える
1

C#アプリケーションには、実行を開始できるように、Main メソッドを持つクラスが少なくとも 1 つ必要です。アプリケーションは多数のクラスを持つことができますが、Main メソッドが 1 つだけのクラスが 1 つだけ必要です。

C#ライブラリに Main メソッドが含まれている必要はありません。

于 2013-02-04T14:30:08.987 に答える
1

これがコンソール アプリケーションの場合は、最初に Main メソッドが必要です。それ以外の場合 (Web アプリケーションなど)、必要ありません。

于 2013-02-04T14:30:23.567 に答える
0

static void main(string[] args) メソッドは、C# プログラムの実行の開始点です。単一の C# ファイルをコンパイルしようとすると、コンパイラはこのメソッドを見つけて実行を開始します。モデルとして使用しているクラスでメソッドを作成する必要はありませんが、コンソール プログラム、WinForms などでこのメソッドを作成する必要があります...

于 2013-02-04T14:27:49.707 に答える