Üst düzey deyimler - yöntemleri olmayan Main
programlar
Konsol uygulaması projesine açıkça bir Main
yöntem eklemeniz gerekmez. Bunun yerine, yazmanız gereken kodu en aza indirmek için üst düzey deyimler özelliğini kullanabilirsiniz.
Üst düzey deyimler, yürütülebilir kodu doğrudan bir dosyanın köküne yazmanıza olanak tanıyarak kodunuzu bir sınıf veya yönteme sarmalama gereksinimini ortadan kaldırır.
Bu, bir Program
sınıfın ve Main
yöntemin töreni olmadan programlar oluşturabileceğiniz anlamına gelir.
Bu durumda, derleyici uygulama için bir Program
giriş noktası yöntemi ile bir sınıf oluşturur. Oluşturulan yöntemin adı değildir Main
, kodunuzun doğrudan başvuramazsınız bir uygulama ayrıntısı.
İşte tam bir C# programı olan Program.cs dosyası:
Console.WriteLine("Hello World!");
Üst düzey deyimler, Azure İşlevleri ve GitHub Actions gibi küçük yardımcı programlar için basit programlar yazmanızı sağlar. Ayrıca yeni C# programcılarının kod öğrenmeye ve yazmaya başlamasını kolaylaştırır.
Aşağıdaki bölümlerde, üst düzey deyimlerle neler yapabileceğiniz ve neleri yapamamanıza ilişkin kurallar açıklanmaktadır.
Yalnızca bir üst düzey dosya
Bir uygulamanın yalnızca bir giriş noktası olmalıdır. Bir projenin en üst düzey deyimleri olan tek bir dosyası olabilir. Üst düzey deyimleri bir projeye birden çok dosyaya yerleştirmek aşağıdaki derleyici hatasına neden olur:
CS8802 Yalnızca bir derleme biriminin üst düzey deyimleri olabilir.
Bir projede üst düzey deyimleri olmayan herhangi bir sayıda kaynak kodu dosyası olabilir.
Başka giriş noktası yok
Bir Main
yöntemi açıkça yazabilirsiniz, ancak giriş noktası olarak çalışamaz. Derleyici aşağıdaki uyarıyı yapar:
CS7022 Programın giriş noktası genel koddur; 'Main()' giriş noktası yoksayılarak.
Üst düzey deyimleri olan bir projede, projenin bir veya daha fazla yöntemi olsa bile giriş noktasını seçmek için -mainMain
.
using
Yönerge -leri
Yönergeleri eklerseniz using
, bu örnekte olduğu gibi dosyada ilk kez gelmeleri gerekir:
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;
Genel ad alanı
Üst düzey deyimler, genel ad alanında örtük olarak bulunur.
Ad alanları ve tür tanımları
Üst düzey deyimleri olan bir dosya ad alanları ve tür tanımları da içerebilir, ancak en üst düzey deyimlerden sonra gelmeleri gerekir. Örneğin:
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
Üst düzey deyimler, girilen komut satırı bağımsız değişkenlerine erişmek için değişkene başvurabilir args
. Değişken args
hiçbir zaman null değildir, ancak Length
komut satırı bağımsız değişkeni sağlanmadıysa sıfır olur. Örneğin:
if (args.Length > 0)
{
foreach (var arg in args)
{
Console.WriteLine($"Argument={arg}");
}
}
else
{
Console.WriteLine("No arguments");
}
await
kullanarak await
zaman uyumsuz bir yöntemi çağırabilirsiniz. Örneğin:
Console.Write("Hello ");
await Task.Delay(5000);
Console.WriteLine("World!");
İşlem için çıkış kodu
Uygulama sona erdiğinde bir int
değer döndürmek için deyiminireturn
, döndüren Main
bir int
yöntemde yaptığınız gibi kullanın. Örneğin:
string? s = Console.ReadLine();
int returnValue = int.Parse(s ?? "-1");
return returnValue;
Örtük giriş noktası yöntemi
Derleyici, en üst düzey deyimleri olan bir projenin program giriş noktası olarak hizmet vermek için bir yöntem oluşturur. yönteminin imzası, üst düzey deyimlerin anahtar sözcüğünü mü yoksa deyimini mi içerdiğine await
return
bağlıdır. Aşağıdaki tabloda, kolaylık sağlamak için tablodaki yöntem adını Main
kullanarak yöntem imzasının nasıl görüneceği gösterilmektedir.
Üst düzey kod içerir | Örtük Main imza |
---|---|
await ve return |
static async Task<int> Main(string[] args) |
await |
static async Task Main(string[] args) |
return |
static int Main(string[] args) |
Hayır await veya return |
static void Main(string[] args) |
C# dili belirtimi
Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.