Pernyataan tingkat atas - program tanpa metode Main

Anda tidak perlu secara eksplisit menyertakan Main metode dalam proyek aplikasi konsol. Sebagai gantinya, Anda dapat menggunakan fitur pernyataan tingkat atas untuk meminimalkan kode yang harus Anda tulis.

Pernyataan tingkat atas memungkinkan Anda menulis kode yang dapat dieksekusi langsung di akar file, menghilangkan kebutuhan untuk membungkus kode Anda dalam kelas atau metode. Ini berarti Anda dapat membuat program tanpa upacara Program kelas dan Main metode. Dalam hal ini, pengkompilasi menghasilkan Program kelas dengan metode titik masuk untuk aplikasi. Nama metode yang dihasilkan bukan Main, ini adalah detail implementasi yang tidak dapat dirujuk oleh kode Anda secara langsung.

Berikut adalah file Program.cs yang merupakan program C# lengkap dalam C# 10:

Console.WriteLine("Hello World!");

Pernyataan tingkat atas memungkinkan Anda menulis program sederhana untuk utilitas kecil seperti Azure Functions dan GitHub Actions. Mereka juga mempermudah programmer C# baru untuk mulai belajar dan menulis kode.

Bagian berikut menjelaskan aturan tentang apa yang bisa dan tidak bisa Anda lakukan dengan pernyataan tingkat atas.

Hanya satu file tingkat atas

Sebuah aplikasi harus memiliki hanya satu titik masuk. Sebuah proyek hanya dapat memiliki satu file dengan pernyataan tingkat atas. Menempatkan pernyataan tingkat atas di lebih dari satu file dalam proyek menghasilkan kesalahan pengompilasi berikut:

CS8802 Hanya satu pelajaran kompilasi yang dapat memiliki pernyataan tingkat atas.

Sebuah proyek dapat memiliki sejumlah file kode sumber tambahan yang tidak memiliki pernyataan tingkat atas.

Tidak ada titik masuk lainnya

Anda dapat menulis metode Main secara eksplisit, tetapi tidak dapat berfungsi sebagai titik masuk. Pengompilasi mengeluarkan peringatan berikut:

CS7022 Titik masuk program adalah kode global; mengabaikan titik masuk 'Utama()'.

Dalam proyek dengan pernyataan tingkat atas, Anda tidak dapat menggunakan opsi pengompilasi -utama untuk memilih titik masuk, meskipun proyek memiliki satu atau beberapa metode Main.

using arahan

Jika Anda menggunakan arahan, mereka harus menjadi yang pertama dalam file, seperti dalam contoh ini:

using System.Text;

StringBuilder builder = new();
builder.AppendLine("The following arguments are passed:");

// Display the command line arguments using the args variable.
foreach (var arg in args)
{
    builder.AppendLine($"Argument={arg}");
}

Console.WriteLine(builder.ToString());

// Return a success code.
return 0;

Namespace layanan global

Pernyataan tingkat atas secara implisit dalam namespace layanan global.

Namespace layanan dan definisi jenis

File dengan pernyataan tingkat atas juga dapat berisi namespace layanan dan definisi jenis, tetapi mereka harus muncul setelah pernyataan tingkat atas. Misalnya:

MyClass.TestMethod();
MyNamespace.MyClass.MyMethod();

public class MyClass
{
    public static void TestMethod()
    {
        Console.WriteLine("Hello World!");
    }
}

namespace MyNamespace
{
    class MyClass
    {
        public static void MyMethod()
        {
            Console.WriteLine("Hello World from MyNamespace.MyClass.MyMethod!");
        }
    }
}

args

Pernyataan tingkat atas dapat merujuk variabel args untuk mengakses argumen baris perintah apa pun yang dimasukkan. Variabel args tidak pernah null tetapi Length null jika tidak ada argumen baris perintah yang diberikan. Misalnya:

if (args.Length > 0)
{
    foreach (var arg in args)
    {
        Console.WriteLine($"Argument={arg}");
    }
}
else
{
    Console.WriteLine("No arguments");
}

await

Anda dapat memanggil metode asinkron dengan menggunakan await. Misalnya:

Console.Write("Hello ");
await Task.Delay(5000);
Console.WriteLine("World!");

Kode keluar untuk proses

Untuk mengembalikan nilai int saat aplikasi berakhir, gunakan pernyataan return seperti yang Anda lakukan dalam metode Main yang mengembalikan int. Misalnya:

string? s = Console.ReadLine();

int returnValue = int.Parse(s ?? "-1");
return returnValue;

Metode titik masuk implisit

Pengompilasi menghasilkan metode untuk berfungsi sebagai titik masuk program untuk proyek dengan pernyataan tingkat atas. Tanda tangan metode bergantung pada apakah pernyataan tingkat atas berisi kata kunci await atau pernyataan return. Tabel berikut menunjukkan seperti apa tanda tangan metode itu, menggunakan nama metode Main dalam tabel untuk kenyamanan.

Kode tingkat atas berisi Main Tanda tangan implisit
await dan return static async Task<int> Main(string[] args)
await static async Task Main(string[] args)
return static int Main(string[] args)
tidak await atau return static void Main(string[] args)

Spesifikasi bahasa C#

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

Spesifikasi fitur - Pernyataan tingkat atas