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 menyertakan using
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. Contohnya:
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. Contohnya:
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
. Contohnya:
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
. Contohnya:
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#.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk