Ü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 sağlayarak 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ı.

C# 10'da tam bir C# programı olan Program.cs dosyası aşağıdadır:

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 ek 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 Main yöntemi olsa bile giriş noktasını seçmek için -main derleyici seçeneğini kullanamazsınız.

using Yönerge -leri

Kullanma yönergelerini eklerseniz, bu örnekte olduğu gibi dosyada ilk bunlar gelmelidir:

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 awaitzaman 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 intbir Main 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 awaitreturn 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.

Özellik belirtimi - Üst düzey deyimler