Aracılığıyla paylaş


Üst düzey deyimler - yöntemleri olmayan Main programlar

Tip

Yazılım geliştirme konusunda yeni misiniz? İlk olarak Başlangıç öğreticileri ile başlayın. Bu öğreticilerde en üst düzey deyimler kullanılır, bu nedenle temel bilgilere zaten aşina olursunuz.

Main yöntemi alternatifini mi arıyorsunuz? Açık yöntem yaklaşımı için bkz. Main.

Yeni uygulamalar için üst düzey deyimleri kullanın. Üst düzey deyimleri kullanarak, yürütülebilir kodu doğrudan bir dosyanın köküne yazabilirsiniz.

İşte tam bir C# programı olan Program.cs dosyası:

Console.WriteLine("Hello World!");

dotnet new console kullanarak yeni bir konsol uygulaması oluşturduğunuzda, varsayılan olarak üst düzey ifadeler kullanılır. Küçük yardımcı programlardan Ve Azure İşlevleri'nden tam uygulamalara kadar her boyuttaki programlar için uygundur. Açık Main bir yöntem kullanan mevcut bir uygulamanız varsa, dönüştürmeniz gerekmez. Her iki stil de eşdeğer koda derlenmiş.

Aşağıdaki bölümlerde, üst düzey deyimlerle neler yapabileceğiniz ve neleri yapamamanıza ilişkin kurallar açıklanmaktadır.

Giriş noktası kuralları

Bir uygulamanın yalnızca bir giriş noktası olmalıdır. Bir projede en üst düzey deyimleri olan yalnızca bir dosya olabilir, ancak en üst düzey deyimleri olmayan herhangi bir sayıda kaynak kodu dosyası olabilir. Açıkça bir Main yöntem yazabilirsiniz, ancak giriş noktası olarak çalışamaz. Üst düzey deyimleri olan bir projede, projede -main bir veya daha fazla Main yöntem olsa bile, giriş noktasını seçmek için derleyici seçeneğini kullanamazsınız.

Derleyici, en üst düzey deyimleri olan bir projenin program giriş noktası olarak hizmet vermek için bir yöntem oluşturur. Yöntemin imzası, üst düzey deyimlerin await anahtar sözcüğünü mü yoksa return deyimini mi içerdiğine bağlıdır. Aşağıdaki tabloda, kolaylık sağlamak için tablodaki yöntem adı Main kullanılarak yöntem imzasının nasıl göründüğü 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# 14'den başlayarak programlar, tek bir dosyanın programı içerdiği dosya tabanlı uygulamalar olabilir. dosya tabanlı uygulamaları komutunu dotnet <file.cs>kullanarak veya doğrudan Unix'te dosya adını kullanarak çalıştırırsınız (örneğin, ./file.cs). İkincisi, yönergesini #!/usr/bin/env dotnet ilk satır olarak dahil edip yürütme iznini (chmod +x <file>) ayarlamayı gerektirir.

using Yönergeler

En üst düzey deyimleri içeren tek bir dosya için, using yönergelerin aşağıdaki örnekte olduğu gibi bu dosyada ilk olarak gelmesi gerekir:

using System.Text;

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

foreach (var arg in args)
{
    builder.AppendLine($"Argument={arg}");
}

Console.WriteLine(builder.ToString());

return 0;

Ad alanları ve tür tanımları

Üst düzey ifadeler, genel ad alanında zımni olarak bulunur. Ü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

En üst düzey ifadeler, uygulama başlatıldığında geçirilen herhangi bir komut satırı bağımsız değişkenine erişmek için args değişkenine başvurabilir. args değişkeni hiçbir zaman null olmaz, ancak komut satırı bağımsız değişkenleri sağlanmadıysa Length sıfırdır. Örneğin:

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

await ve çıkış kodu

await bir asenkron yöntemi çağırmak için kullanın. En üst düzey kodunuz await içerdiğinde, derleyici Task döndüren bir giriş noktası oluşturur. Çalışma zamanı, tamamlanmak üzere bunu Task izler ve zaman uyumsuz tüm çalışmalar bitene kadar işlemi canlı tutar. Örneğin:

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

Uygulama sona erdiğinde çıkış kodu döndürmek için deyimini return kullanın. Derleyici, kodunuz hem Task<int> hem de await içerdiğinde return, veya yalnızca int içerdiğinde return döndüren bir giriş noktası oluşturur. Örneğin:

string? s = Console.ReadLine();

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