C# Main Method .Net 6 – Nerede?

Bildiğimiz gibi .NET 6, .NET’in Kasım 2021’de piyasaya sürdüğü uzun dönem destekli (long-term-supported) en son sürümüdür. Ve performans, güvenlik, kod kalitesi, geliştirici deneyimi açısından birçok iyileştirmeyle sunulmuştur.

Bu makalede, .NET 6’ya nasıl başlanacağı ve .NET5’e kıyasla .NET 6’daki yenilikler açıklanmaktadır. Ve en önemli sorumuzun yanıtını arayacağız. Alışık olduğumuz bizimle bütünleşen Main Metodumuz Nerede?

.NET 6’da Konsol Uygulaması Oluşturma

Adım 1: Visual Studio 2022’yi açın ve Yeni bir proje oluştur’a tıklayın.

Adım 2: Konsol Uygulamasını seçin ve İleri’ye tıklayın.

Adım 3: Proje adını ve projenin yerini belirtin.

Adım 4: Framework Seçin .NET 6.0 (Long-term support).

Sonuç: Solution Explorer

Varsayılan olarak Program.cs dosyası aşağıdaki gibi açılacaktır.

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

Project.csproj dosyasını da incelersek.

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>

Şimdi programı çalıştırın (F5) veya Strat without debugging düğmesini kullanarak.

Karşınıza Hello World yazan bir konsol penceresi açılacaktır ve proje dizinine bakacak olursanızda FirstConsoleApp.exe dosyasının oluşturulmuş olduğunu görecekseniz.

.NET 6 ile birlikte alışa geldiğimiz Main Methodumuz artık varsayılan template olarak bizlere sunulmuyor ama kodlarımıza baktığımız zaman aslında değişenin sadece bir template olduğu çalışma düzeni doğrultusunda hiç bir değişikliğin olmadığının farkına varacaksınız. Sadece gizlenen bir main metodumuz varmış gibi çalışmaya devam edebilirsiniz. Kodlarınız yukarıdan aşağıya doğru derlenmeye devam edecektir.

Örneğin gelin kendimiz program.cs dosyasının içerisinde bir metot oluşturarak yolumuza devam edelim.

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
ShowMe();

static void ShowMe()
{
    Console.WriteLine("Merhaba Dünya");
}

ShowMe() adında bir metot oluşturdum ve içerisine Console.WriteLine ile ekrana Merhaba Dünya yazmasını söyledim. Ardından yazdığımı metodumu ilk satırımın altında çağırdım. Şimdi programımızı tekrar çalıştıralım.

Sizi konsol ekranında,

Hello, World!
Merhaba Dünya

yazısı karşılayacaktır.

Gördüğünüz gibi çalışma düzeni olarak alışageldiğimiz template yapısından bir farkı yok.

Şimdi projemize yeni bir Class ekleyelim ve bu durumda bizleri nelerin karşılandığına hep birlikte bakalım.

Solution Explorer üzerinden Projeye sağ tıklayın—Add–>Class’a gidin ve ekle’ye tıklayın.

Ve içerisine Sum adında bir metot oluşturalım.

namespace FirstConsoleApp {
    internal class Class1 {
        public void Sum() {
            int a = 5;
            int b = 6;
            int Sum = a + b;
            Console.WriteLine("Sum : {0}", Sum);
        }
    }
}

Burada baktığımız zaman alışa geldiğimiz Class yapısı bizi karşılar; namespace, internal class, using statements gibi. Bunu görünce benim gibi eski yazılımcılar bir oh çekmiştir herhalde 🙂

Şimdi Sum() metodunu Program.cs’de çağırayalım.

using FirstConsoleApp;

Console.WriteLine("Hello, World!");
ShowMe();

Class1 class1 = new Class1();
class1.Sum();

static void ShowMe()
{
    Console.WriteLine("Merhaba Dünya");
}

Class1 sınıfımı new’lediğim anda using FirstConsoleApp; anahtar kelimemizin de geldiğini fark edeceksinizdir.

Şimdi uygulamayı tekrar çalıştırırsak aşağıda ki ekran bizi karşılayacaktır.

Hello, World!
Merhaba Dünya
Sum : 11

Sonuç olarak .NET 6 ile gelen template farklılığı bizim alışa geldiğimiz Main Method düzenini kaldırmak dışında çalışma düzeni olarak farklı bir yapı getirmemektedir. Tabi ki, yeni template düzenin getirdiği bir takım performans özelliklerini saymazsak.

Yeni Template’di Microsoft şu şekilde bize açıklıyor olduğu gibi yazıyorum ve incelemeniz için linki bırakıyorum.

Her iki sürüm de C# 10.0 ile geçerlidir. Daha yeni sürümü kullandığınızda, yalnızca yönteminin gövdesini Main yazmanız gerekir. Derleyici bir sınıfı bir ProgramMain yöntemle sentezler ve tüm üst düzey deyimlerinizi bu Main yönteme yerleştirir. Diğer program öğelerini eklemeniz gerekmez, derleyici bunları sizin için oluşturur. C# Kılavuzu’nun temelleri bölümündeki üst düzey deyimler makalesinde en üst düzey deyimleri kullandığınızda derleyicinin oluşturduğu kod hakkında daha fazla bilgi edinebilirsiniz.

.NET 6+ şablonlarını kullanacak şekilde güncelleştirilmeyen öğreticilerle çalışmak için iki seçeneğiniz vardır:

  • Özellik eklerken yeni üst düzey deyimler ekleyerek yeni program stilini kullanın.
  • Yeni program stilini bir Program sınıf ve bir yöntemle eski stile Main dönüştürün.
https://learn.microsoft.com/tr-tr/dotnet/core/tutorials/top-level-templates

Eski Program Stilini Kullanma

Peki .NET Core 6 ile eski program stilini kullanabilir miyiz? Bu konuda microsoft benim gibi eski yazılımcıları da düşünmüş olacak ki radika bir geçiş yapmamış bizlere bir açık kapı bırakmış.

Visual Studio’da eski program stilini kullanma

  1. Yeni bir proje oluşturduğunuzda, kurulum adımları Ek bilgi kurulum sayfasına gider. Bu sayfada Üst düzey deyimleri kullanma (Do not use top-level statements) onay kutusunu seçin.

2. Program.cs sınıfımızın herhangi bir kod alanı içerisinde alt+enter tuşlarına basın -> Convert to ‘Program.Main’ style program başlığına tıklayın.

Sonuç:

internal class Program
{
    private static void Main(string[] args)
    {
        Console.WriteLine("Hello, World!");
        ShowMe();

        Class1 class1 = new Class1();
        class1.Sum();

        static void ShowMe()
        {
            Console.WriteLine("Merhaba Dünya");
        }
    }
}

Leave a Reply

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir