Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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
Maindi dalam kelas atau struktur. Penutupclassdapat berupastatic. -
Mainharus merupakanstatic. -
Maindapat memiliki pengubah akses apa pun. -
Maindapat mengembalikanvoid,int,Task, atauTask<int>. - Jika dan hanya jika
MainmengembalikanTaskatauTask<int>, deklarasiMaindapat menyertakan pengubahasync. Aturan ini secara khusus mengecualikanasync void Mainmetode. - Anda dapat mendeklarasikan
Mainmetode dengan atau tanpastring[]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 dalamargsarray, 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#.