Tag Archives: .net 5.0

C# 9.0 Yenilikleri – Top-level Statements

C# 9.0 versiyonu ile gelen “top-level statements” özelliğine göz attık videoda. Özellikle C#’a yeni başlayan kişiler için kod yazmayı daha basit hale getirdiğini düşündüğüm bir yapı.

Şimdi boş bir konsol uygulaması oluşturduğunuz düşünelim, karşınıza gelen kod bloğu şu şekilde oluyor;

using System;

namespace ConsoleNetCoreTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

Yeni başlayan kişiler için, using, namespace, static, void, Main, diziler, args gibi birçok bilmediği yapı var bu boilerplate kod içerisinde. Bunlar kafa karıştırıcı olabiliyor.

.NET 5 ile birlikte gelen C# 9.0 versiyonunda, statement’ları direkt olarak dosyanızın en üstünde yazabiliyorsunuz. Bu nedenle namespace, class, Main gibi kısımları yazmamanıza gerek kalmıyor. Bu sayede başlangıç seviyesindeki kişiler için daha basit bir şekilde kod yazma imkanı oluşuyor.

.NET 5 ile geldiği için öncelikle .csproj dosyanızdaki “TargetFramework” kısmını “net5.0” olarak düzenlemeniz gerekiyor. Tabi bunu videodaki gibi projenin properties kısmından da düzenleyebiliyorsunuz .NET 5.0’ı seçerek.

using System;
Console.WriteLine("Hello World!");

Peki Main metodu olmadan işletim sistemi başlangıç noktasını nereden biliyor? Aslında IL koduna baktığınızda, hala compiler arka tarafta “Program” adında bir sınıf ve “Main” adında bir metod oluşturuyor. Sadece bunun açık bir şekilde yazılmasına gerek kalmıyor artık. Hatta “args” kısmını da direkt olarak kullanabiliyorsunuz sihirli bir şekilde. Örneğin command line üzerinden parametre gönderdiğinizde “args” ile bunları direkt alabiliyorsunuz.

using System;
if (args.Length != 0)
{
    foreach (var arg in args)
    {
        Console.WriteLine(arg);
    }
}

Birkaç kural;

► Sadece tek bir dosyanız top-level statement’a sahip olabiliyor “Main” mantığı gereği. Bir başka dosya içerisinde top-level statement yazmaya çalıştığınızda hata alıyorsunuz.

► Top-level statement’lar, içerisinde kullandığınız başka sınıf tanımlarının da üstünde olmalıdır. Önce sınıf tanımını yapıp sonra statement’ı yazdığınızda hata alırsınız. Hatta bu tanımlamaları yaptığınız IL koduna bakarsanız, bu Person sınıfının sanki farklı bir .cs dosyası içerisindeymiş gibi oluştuğunu görürsünüz. Yani C# derleyicisi önce bi “top-level statements”ları alıp, Program sınıfı ve Main metodu için derler, geri kalan tiplerin hepsini de ayrı bir C# tipi gibi derleme yapar.

► Son söz olarak;

Bence bu özellik C# dili ile daha kolay bir şekilde “oynamamızı” sağlıyor. Özellikle C#’ı yeni öğrenmeye başlayan kişiler için ve küçük kod yazımları bakımından gayet faydalı olduğunu düşünüyorum. Kaynaklar:

► Top-level statements: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-9.0/top-level-statements

► Exploring top-level statements in C# 9 https://www.tabsoverspaces.com/233831-exploring-top-level-statements-in-csharp-9

► Exploring top-level statements in C# 9 https://www.reddit.com/r/programming/comments/h0uycm/exploring_toplevel_statements_in_c_9/

► İncelemek isterseniz Linqpad: https://www.linqpad.net/