C# Nedir, .Net Framework Nedir? Farkları Nelerdir? Neden Karıştırılıyorlar?
Eğer siz de benim gibi bir “Dotnet Developer” iseniz siz de .NET Framework ve C# kavramlarını duymuş olmalısınız. Bu iki kavram neden ayrı ayrı ele alınıyor veya bunlar nedir kardeşim diyenler varsa etrafınızda ve bunları anlatmakta güçlük çekiyorsanız bu yazıda işinizi kolaylaştıracağız.
Şuradaki linkteki kaynaktan görebileceğiniz üzere, C# ve .Net Framework kavramları yanlarına eklenen numaralar ile ayrı ayrı versiyonlaştırılmış. 2002 de versiyon 1.0 ile başlayan serüvenlerinde 2012 yılına gelene kadar, yani C# 5 versiyonu yayınlanana kadar her ikisi de aynı sürüm numaralarına sahipti ancak bu yıl ile birlikte C# 5.0 ile yoluna devam ederken, .Net Framework tarafında versiyonlar 4.5 diye devam etti. Artık bu saatten sonra belki de kafaların karışmasına sebep olan iki ayrı versiyon vardı elimizde. Ancak bu kafa karışıklığının asıl sebebi bu iki kavramın zaten aynı şey olduğunu düşünmemiz olabilir. Peki bu ikisi de ayrı ayrı ne anlamına geliyor?
Öncelikle .Net Framework dediğimiz kavramdan başlayalım.
Bu kavram aslında geniş bir yapıyı içinde barındırıyor. Şöyle ki; .Net Framework dediğimiz şey en temelde Windows üzerindeki işletilebilen dosya uzantısı olan .dll’e sahip olan dosyalar bütünü diyebiliriz. Bu dosyalar içerisinde hem .Net Framework’e ait işletilebilir kodlar var hem de Windows işletim sistemine (daha sonra Linux ve Mac işletim sistemleri de eklendi) ait hizmetleri kullanmamızı sağlayan kodlar mevcut. .NET Framework sadece bununla da kalmıyor içerisinde CLR (Common Language Runtime) dediğimiz uygulamalarımızın çalışmasını sağlayan da ortak bir yapıyı da barındırıyor.
CLR temelde ortak dile çevrilmiş uygulamaların çalıştırılmasını sağlayan birimdir.
Peki bu birimin .Net içerisinde olması bizi neden ilgilendiriyor?
.Net içerisindeki bu CLR olmadan biz C# dilini kullanarak uygulamalarımızı çalıştıramıyoruz. Evet duydunuz C# için bir “DİL” ifadesini kullandım. Birazdan detaylara değineceğiz. CLR ortak bir yapı olduğu için (Common) CLR’a çevrilmiş bir assembly bunu destekleyen herhangi bir işletim sistemi tarafından çalıştırılabilir(Cross Platform desteği sunan programlama dilleri de bundan faydalanıyor). O zaman buradan anladığımız şu, bir işletim sistemi üzerinde CLR varsa ve bu CLR da çalıştırılabilecek bir assembly varsa bu assembly herhangi bir işletim sistemi tarafından çalıştırılabilir. Evet doğru anlamışız :)
Şimdi .Net Framework tarafına geri dönelim. Framework için ne demiştik? İçerisinde hem işletim sistemi API lerini kullanabilen hem de kendine özgü fonksiyonları olan ve bize bunları sunabilen, dll lerden oluşmuş, içerisinde CLR’ı da barındıran bir yapı (Çok güzel tabir oldu!).
Dolayısı ile .Net Framework her versiyon güncellemesi aldığında, hem işletim sistemleri tarafında değişmiş olan servisleri geliştiriyor hem de kendi içerisinde bize sunmuş olduğu özellikleri değiştiriyor. Bazılarında performans çalışmaları yapılırken belki bazı özellikler ise komple kaldırılıyor. Bu sebeple .Net Framework’ün en güncel halini kullanmak her zaman avantajımıza olacaktır. Peki diyelim ki biz .Net Framework’ün bu özelliklerini kullanmak istiyoruz. Bu durumda ne yapmamız gerekiyor derseniz de o zaman bu hizmetlere ulaşmamızı sağlayacak bir programlama diline ihtiyacımız var. Hatırladınız mı C# için bir “DİL” demiştik. Gelin şimdi C# tarafını inceleyelim.
Evet, C# bir programlama dilidir. Hem de çok geniş hizmetler sunan bir programlama dilidir. .Net Framework hizmetlerine ulaşmamızı sağlayan bir dildir ayrıca. Hatta öyle ki zaten .Net Framework’e kolay ulaşalım diye geliştirilmiştir. Peki .NET Framework’ü aradan çıkartıp doğrudan CLR kullanarak bir uygulamayı çalıştırmak mümkün müdür sizce? Cevabımız evet. çünkü daha önce de bahsettiğim gibi bu yapı ortak bir yapı. CLR destekleyen başka bir programlama dili kullanarak o işletim sistemi üzerinde o uygulamayı çalıştırabiliriz. Hangi dillerin CLR’ı desteklediğinin listesine de şuradan ulaşabilirsiniz.
CSharp’a geri dönelim. Peki C# programlama dili ise bu dilin versiyonlarında neler değişiyor? Bunu iki kategoriye ayıralım;
- C# güncellemeleri, .NET Framework içerisindeki güncellemeleri kullanmak üzere geliştiriliyor. Yani .Net Framework içerisine bir özellik eklendiğinde C# da bu özelliği kullanabilmek için kendini geliştirmeli. Örneğin yakın bir dönemde NET7 versiyonu yayınlanacak ve içerisinde bir çok özelliği barındıracak. Bu yeni özellikleri kullanabilmek için C# tarafında da bir güncelleme yapılması gerekiyor ki o da C#11 versiyonu olacak. NET7 nin tüm özelliklerini C#11 ile kullanabileceğiz.
- CSharp’ın bir dil olması sebebiyle kendi içerisinde de bazı özellikleri barındırdığını söyleyebiliriz. Bu özellikler bizim “Syntax” yani kod yazma stilimizi de değiştirebiliyor. Örneğin; C#’ın eski versiyonlarında bir List<string> yaratmak istediğimizde kodumuz şöyle olmalı;
Ancak daha sonra C# dili içerisindeki geliştirmeler sebebiyle “Compiler”, yani kodumuzun derlenmesini sağlayan mekanizma da gelişti ve artık kod yazım stilimizi doğru şekilde değiştirerek aynı sonucu elde edebiliyoruz. Mesela C#10 versiyonunda artık şu şekilde de tanımlama yapabiliyoruz.
Bu ve bunun gibi geliştirmeler ise .NET Framework’e erişmek için kullanmış olduğumuz programlama dilleri tarafında, yani buradaki örneğimizdeki gibi C# dili içerisinde yapılıyor.
Bu yazımızda C# ve .Net Framework gibi kavramları ayrı ayrı ele alarak neden ikisinin ayrı şeyler olduğunu ve dolayısıyla da neden farklı versiyonlara sahip olduklarına değindik.
Başka bir yazıda görüşmek üzere :)
Youtube Kanalı: https://www.youtube.com/c/TechBuddyTR
Kaynaklar;