Bagikan melalui


Utama() dan Argumen baris perintah

Petunjuk / Saran

Baru mengembangkan perangkat lunak? Mulai dengan tutorial Memulai terlebih dahulu. Tutorial tersebut menggunakan pernyataan tingkat atas, yang lebih sederhana untuk aplikasi baru.

Bekerja dengan basis kode yang ada? Banyak aplikasi yang ada menggunakan metode eksplisit Main . Artikel ini menjelaskan cara kerjanya dan cara menggunakannya secara efektif.

Saat Anda memulai aplikasi C#, runtime memanggil Main metode . Metode Main ini adalah titik masuk aplikasi C#.

Program C# hanya dapat memiliki satu titik masuk. Jika Anda memiliki lebih dari satu kelas dengan Main metode , Anda harus menggunakan opsi kompilator StartupObject saat mengkompilasi program untuk menentukan metode mana yang Main berfungsi sebagai titik masuk. Untuk informasi selengkapnya, lihat StartupObject (Opsi Pengompilasi C#). Contoh berikut menampilkan jumlah argumen baris perintah sebagai tindakan pertamanya:

class TestClass
{
    static void Main(string[] args)
    {
        Console.WriteLine(args.Length);
    }
}

Gambaran Umum

Metode Main ini adalah titik masuk dari program yang dapat dieksekusi. Ketika program Anda dimulai, runtime akan memanggil Main sebelum kode lain dijalankan. Ketika Main kembali, program berakhir. Anda menyatakan Main dengan aturan ini:

  • Anda harus menyatakan Main di dalam kelas atau struktur. Penutup class dapat berupa static.
  • Main harus merupakan static.
  • Main dapat memiliki pengubah akses apa pun.
  • Main dapat mengembalikan void, int, Task, atau Task<int>.
  • Jika dan hanya jika Main mengembalikan Task atau Task<int>, deklarasi Main dapat menyertakan pengubah async . Aturan ini secara khusus mengecualikan async void Main metode.
  • Anda dapat mendeklarasikan Main metode dengan atau tanpa string[] parameter yang berisi argumen baris perintah. Saat Anda menggunakan Visual Studio untuk membuat aplikasi Windows, Anda dapat menambahkan parameter secara manual atau menggunakan GetCommandLineArgs() metode untuk mendapatkan argumen baris perintah. Parameter adalah argumen baris perintah yang diindeks nol. Tidak seperti C dan C++, nama program tidak diperlakukan sebagai argumen baris perintah pertama dalam args array, tetapi ini adalah elemen pertama dari metode .GetCommandLineArgs()

Berikut adalah daftar yang menunjukkan permutasi deklarasi Main:

static void Main() { }
static int Main() { }
static void Main(string[] args) { }
static int Main(string[] args) { }
static async Task Main() { }
static async Task<int> Main() { }
static async Task Main(string[] args) { }
static async Task<int> Main(string[] args) { }

Contoh sebelumnya tidak menentukan pengubah akses, sehingga secara implisit private secara default. Anda dapat menentukan pengubah akses eksplisit apa pun.

Tabel berikut ini meringkas semua tanda tangan yang valid Main dan kapan menggunakan masing-masing tanda tangan:

Main deklarasi Menggunakan args Berisi await Mengembalikan kode keluar
static void Main() No No No
static int Main() No No Yes
static void Main(string[] args) Yes No No
static int Main(string[] args) Yes No Yes
static async Task Main() No Yes No
static async Task<int> Main() No Yes Yes
static async Task Main(string[] args) Yes Yes No
static async Task<int> Main(string[] args) Yes Yes Yes

Pilih tanda tangan paling sederhana yang sesuai dengan kebutuhan Anda. Jika Anda tidak memerlukan argumen baris perintah, hilangkan string[] args parameter . Jika Anda tidak perlu mengembalikan kode keluar, gunakan void atau Task. Jika Anda perlu memanggil metode asinkron, gunakan async dengan jenis pengembalian Task atau Task<int>.

Nilai pengembalian Main()

Ketika Anda mengembalikan int atau Task<int>, program Anda dapat mengirim informasi status ke program atau skrip lain yang menjalankan executable. Nilai 0 pengembalian biasanya berarti berhasil, dan nilai bukan nol berarti ada kesalahan.

Contoh berikut mengembalikan kode keluar:

class MainReturnValTest
{
    static int Main()
    {
        //...
        return 0;
    }
}

Setelah menjalankan program, Anda dapat memeriksa kode keluar. Di PowerShell, gunakan $LastExitCode. Dalam file batch atau skrip shell, gunakan %ERRORLEVEL%.

Jika metode Main Anda menggunakan await, deklarasikan sebagai async dengan jenis pengembalian Task atau Task<int>. Runtime memanggil Main dan menunggu hingga hasil Task terselesaikan sebelum proses keluar. Jenis pengembalian tidak boleh void atau int karena pengubah async memerlukan jenis pengembalian yang dapat ditunggu oleh runtime—void dan int tidak mewakili pekerjaan yang sedang berlangsung, sehingga proses dapat keluar sebelum operasi asinkron selesai. Gunakan Task saat Anda tidak memerlukan kode keluar, atau Task<int> saat Anda melakukannya:

class Program
{
    static async Task<int> Main(string[] args)
    {
        return await AsyncConsoleWork();
    }

    private static async Task<int> AsyncConsoleWork()
    {
        return 0;
    }
}

Argumen baris perintah

Sertakan parameter string[] args dalam deklarasi Main Anda untuk menerima argumen baris perintah. Jika Anda tidak membutuhkannya, hilangkan parameter . Parameter args adalah String array yang tidak pernah null—jika tidak ada argumen yang disediakan, nilainya Length nol.

Anda dapat mengonversi argumen string ke jenis lain dengan menggunakan Parse atau Convert:

long num = long.Parse(args[0]);

Petunjuk / Saran

Mengurai argumen baris perintah bisa kompleks. Pertimbangkan untuk menggunakan pustaka System.CommandLine untuk menyederhanakan proses.

Untuk contoh kerja, lihat Cara menampilkan argumen baris perintah.

Spesifikasi bahasa C#

Untuk informasi selengkapnya, lihat Spesifikasi Bahasa C#. Spesifikasi bahasa adalah sumber definitif untuk sintaks dan penggunaan C#.