C# Versiyon 1.0 Yenilikleri / Özellikleri
Ocak 2002’de yayınlandı.
Geri dönüp baktığınızda, Visual Studio .NET 2002 ile yayınlanan C# 1.0 sürümü, Java’ya çok benziyordu. ECMA için belirtilen tasarım hedeflerinin bir parçası olarak, “basit, modern, genel amaçlı, object-oriented language (nesne tabanlı bir dil)” olmayı amaçlıyordu. 2002 yıllarında JAVA’nın hakimiyet durumu ile C#’ın bugün ki hakimiyet durumu göz önüne alındığında C#’ın bu hedefi oldukça başardığı ve üste geçtiği gözüküyor.
Şimdi C# 1.0 sürümüne dönüp baktığımızda, bugün C# deyince aklımıza gelen en temel kavramlar karşımıza çıkar. Bu resim süreç içerisinde C#’ın ne kadar geliştiğinin bir resmidir aslında. Ne bir async programlama ne bir Generic yapılar gibi bugün artık vazgeçilmez olan bir çok özelliği (LINQ, Lambda, Nullable Types, v.b.) görmemekteyiz.
Özetle C# 1.0 sürümü bugüne kıyasla tam bir base class’dir diyebiliriz.
C# 1.0 Özellikleri
- Class (Sınıf)
- Struct (Yapı)
- Interface (Arayüz)
- Event (Olay)
- Property (Özellik)
- Delegate (Temsilci)
- Operatorler ve İşlevleri
- Statement (Ifadeler)
- Attribute (Nitelik)
C# Versiyon 1.2 Yenilikleri / Özellikleri
Nisan 2003’de yayınlandı.
C# 1.2 sürümü, Visual Studio .NET 2003 ile birlikte geldi. C# 1.2 ile büyük değişiklikler yayınlamadı. Sadece bizlere birkaç küçük geliştirme tanıttı. En dikkate değer olanı, bu sürümden başlayarak IEnumerator IDisposable‘ı implement (uyguladığından) ettiğinden, kodun bir IEnumerator üzerinde Dispose adlı bir foreach döngüsünde oluşturulmasıdır.
C# Versiyon 2.0 Yenilikleri / Özellikleri
Kasım 2005’te yayınlandı.
2005’te yayınlanan C# 2.0 sürümü Visual Studio 2005 ile birlikte tanıtıldı. Bugün de sıklıkla kullandığımız Generic ve Nullable Value Type olmak bir çok yeni özellikler yayınlandı. C# 2.0 sürümü de özellikle tanıttığı Generic yapılar bir devrim niteliğindeydi.
C# 2.0 Özellikleri
- Generics
- Partial type
- Anonymous method (Anonim metot)
- Nullable value type (Null değer alabilen değişken tipi)
- Iterator (Yineleyiciler)
- Covariance ve Contravariance (Kovaryans ve Kontvaryans)
C# 2.0 ile 1.0 Üzerine Gelen Gelişmeler
- Getter/setter metotların ayrışması
- Method group conversions (delegate)
- Static class (Sabit Sınıf)
- Delegate inference
C#, genel bir Object-Oriented (OO) (Nesne Yönelimli) dil olarak başlamış olsa da, C# 2.0 sürümü ile birlikte bu hedefini kısa sürede değiştirdiğini/geliştirdiğini görüyoruz.
Generic yapılar, tipler ve metotlar ile tip güvenliğini koruyarak isteğe bağlı bir tip ile çalışabilen bir yapı geliştirdi. Örneğin, bir List<T> yapısını instance ederken List<string> veya List<int> gibi string, int ve benzeri bir yapıyla çağırmamız gerekmektedir. Bu durumda bizlere tip güvenliği işlemini sağlar.
C# 2.0 bizlere Iterator (yineleyiciler) de getirdi. Kısa ve öz bir şekilde ifade etmek gerekirse, iterator (yineleyiciler), bir Listedeki (veya numaralandırılabilir türlerdeki) tüm öğeleri bir foreach döngüsüyle incelemenize izin veren yapılardır. Bu durum dilin okunabilirliğini ve geliştiricilerin kod hakkında mantık yürütme yeteneğini önemli ölçüde artırmıştır.
Ama yine de C#’ın 2.0 sürümü henüz Java ile arayı kapatamamıştır. Çünkü Java, generic ve iterator içeren sürümleri zaten yayınlamıştı.
C# Versiyon 3.0 Yenilikleri / Özellikleri
Kasım 2007’de yayınlandı.
C# 3.0 sürümü, Visual Studio 2008 ile birlikte 2007’nin sonlarında geldi, ancak dil özelliklerinin tamamı aslında .NET Framework sürüm 3.5 ile geldi. Bu sürüm, C#’ın büyümesinde en büyük katkıyı yapan sürümü oldu. Java’yı tam burada yakalayıp geçtik diyebilirim. Açıkça söyleyeyim C#’ı gerçekten müthiş bir programlama dili haline getirdi ve altın çağını yaşamaya başladı.
C# 3.0 Özellikleri
- Auto-implemented property
- Anonymous type (Anonoim tip)
- Query expression (Sorgulama ifdaesi)
- Lambda expression (Lambda ifadesi)
- Expression tree (Iface ağacı)
- Extension method (Genişletilebilir metot)
- Implicitly typed (var)
- Partial method (Kısmi metot)
- Object ve collection initializers (Nesne ve koleksiyon başlatıcıları)
Günüzümden bakıldığında artık 3.0 ve öncesi özelliklerinin çoğunun artık kaçınılmaz olduğu görünüyor. C# 3.0 sürümünün süper starı diyebileceğim özelliği Language-Integrated Query (LINQ) olarak da bilinen sorgu ifadesi olduğunu söyleyebilirim.
C# 3.0 sürümü ile özellikle LINQ özelliği sayesinde genel bir Object-Oriented programlama dilinden Hibrit bir Object-Oriented / Functional dil olma yönünde hedeflerini değiştirmiştir.
Spesifik olarak, artık diğer şeylerin yanı sıra koleksiyonlar üzerinde işlemler gerçekleştirmek için SQL stili bildirime dayalı sorgular yazabilirsiniz. Bir tamsayılar listesinin ortalamasını hesaplamak için bir for döngüsü yazarak işlemler yapmak yerine, artık bunu list.Average() kadar basit bir şekilde yapabilirsiniz anlamına gelmektedir.
C# Versiyon 4.0 Yenilikleri / Özellikleri
Nisan 2010’da yayınlandı.
Açıkcası Visual Studio 2010 ile piyasaya sürülen C# 4.0 sürümü, C# 3.0 sürümünün çığır açan durumuna ayak uydurmakta zorlandı. C# 4.0 sürümü çok büyük yenilikler getirmek yerine bizlere ilginç yeni özellikler getirmiştir.
C# 4.0 Özellikleri
- Dynamic Type
- Named/optional argument (Opsiyonel parametreler)
- Generic covariant ve contravariant (Generic Kovaryans ve Kontvaryans)
- Embedded interop type
Embedded interop type, uygulamanız için COM birlikte çalışma derlemeleri oluşturmanın dağıtım sıkıntısını hafifletti. Generic covariance ve contravariance, generic kullanmak için size daha fazla güç verir, ancak bunlar biraz akademiktir ve muhtemelen en çok framework ve library geliştiricileri tarafından takdir edilir. Named/optional parameter, birçok metot overload (aşırı yüklemesini) ortadan kaldırmanıza ve kolaylık sağlamanıza olanak tanır.
C# 4.0 ile birlikte tanıtılan ana özellik ise dynamic anahtar kelimesinin tanıtılmasıydı. Dynamic anahtar sözcüğünü kullanarak, JavaScript gibi dinamik olarak yazılan dillere benzer yapılar oluşturabilirsiniz. Bir dynamic x = “a string” oluşturabilir ve ardından buna eklemeler yapabilir daha sonra ne olması gerektiğini çalışma zamanına bırakabilirsiniz.
C# Versiyon 5.0 Yenilikleri / Özellikleri
Ağustos 2012’de yayınlandı.
Visual Studio 2012 ile yayınlanan C# 5.0 sürümü, dilin odaklanmış bir sürümüydü. Bu sürüm için neredeyse tüm çaba programlama dilinde yeni bir çığır açacak olan asenkron kavramına harcandı: async ve await modeli.
C# 5.0 Özellikleri
caller info attribute, bir çok basmakalıp yansıtma koduna başvurmadan çalıştığınız bağlam hakkında kolayca bilgi almanıza olanak tanır.
Ama kesinlikle bu sürümün yıldızı async ve await modeli. 2012’de bu özellikler çıktığında, C# async ile oyuna yeni bir süper star kazandırdı diyebiliriz.
C# Versiyon 6.0 Yenilikleri / Özellikleri
Temmuz 2015’te yayınlandı.
C# 6.0 sürümü ile büyük bir değişiklik tanıtılmadıysa da C# programlamayı daha verimli hale getiren birçok küçük özelliği yayınladı.
C# 6.0 Özellikleri
- Static import
- Exception filter
- Auto-property initializer
- Expression bodied member
- Null propagator
- String interpolation
- nameof operator
Bu sürümde C#, kodu daha okunabilir hale getirmek için dil kalıplarını ortadan kaldırmaya başladı. Dolayısıyla, clean (temiz) kod hayranları için bu dil sürümü büyük bir kazançtı.
C# Versiyon 7.0 Yenilikleri / Özellikleri
Mart 2017’de yayınlandı.
C# 7.0 sürümü, Visual Studio 2017 ile piyasaya sürüldü. Genellik 6.0 sürümü üzerinden geliştirmeler odaklı özellikler tanıtıldı.
C# 7.0 Özellikleri
- Out variables
- Tuples ve deconstruct
- Pattern matching
- Local function
- Expanded expression bodied member
- Ref local
- Ref return
Tüm bu özellikler, geliştiriciler için yeni yetenekler ve her zamankinden daha clean (temiz) kod yazma fırsatı sundu. Buranın yıldızı ise out anahtar kelimesi ile tuple aracılığıyla birden fazla dönüş değerine izin veren yapısıdır. Bu sürümün bir diğer kilit noktası ise .NET Core ile birlikte artık herhangi bir işletim sisteminin hedeflemesinden vazgeçerek gözünü kesinlikle cloud (bulut) ve taşınabilir sistemlere çevirmiştir. Bu sürüm ile aslında C# geliştiricilerin düşünce yapılarını da değiştirmiştir.
C# Versiyon 7.1 – 7.2 – 7.3 Yenilikleri / Özellikleri
Ağustos 2017, Kasım 2017, Mayıs 2018’de yayınladı.
C# 7.1 ile nokta sürümlerini yayınlamaya (7.2, 7.3) başladı. C# bu sürümler ile dil özelliğine ve derleyici davranışlarına birçok ufak özellikler ekledi. Özellikle ref ifadaleri üzerine.
C# Versiyon 8.0 Yenilikleri / Özellikleri
Eylül 2019’da yayınlandı.
C# 8.0 sürümü, özellikle .NET Core’u hedefleyen ilk büyük C# sürümüdür. Bazı özellikler yeni CLR yeteneklerine, diğerleri ise yalnızca .NET Core’da eklenen library tiplerine dayanır. C# 8.0 sürümü, C# diline aşağıdaki özellikleri ve geliştirmeleri ekledi.
C# 8.0 Özellikleri
- Readonly member
- Default interface method
- Pattern matching enhancements:
- Switch expression
- Property pattern
- Tuple pattern
- Positional pattern
- Using declaration
- Static local function
- Disposable ref struct
- Nullable reference type
- Asynchronous stream
- Indices ve ranges
- Null-coalescing assignment
- Unmanaged constructed type
- Stackalloc in nested expression
- Enhancement of interpolated verbatim strings
Bu özellikler, .NET Core 3.0 için CLR’ye eklenmiştir. Range, Index ve asynchronous stream’ler, .NET Core 3.0 kitaplıklarında yeni türler gerektirir. Null yapılabilir referans tipleri, derleyicide implement edilirken, Library’lere bağımsız değişkenlerin ve dönüş değerlerinin null durumuyla ilgili semantic bilgi sağlamak için açıklama eklendiğinde çok daha kullanışlıdır. Bu ek açıklamalar .NET Core library’lerine eklenmektedir.
C# Versiyon 9.0 Yenilikleri / Özellikleri
Kasım 2020’de yayınlandı.
C# 9 sürümü, .NET 5 ile yayınlandı. .NET 5 sürümünü hedefleyen tüm derlemeler için varsayılan dil sürümüdür.
Bu sürümün devrim niteliğindeki özelliği ise yıllardır alışık olduğumuz program.cs class’ında artık static void Main() metodumuzun olmamasıdır.
Top level statement (ifadeler), main (ana) programın okunmasının daha kolay olduğu anlamına gelir. Bu nedenle kod okumasını daha kolaylaştırmak için namespace, program class ve static void main() ifadeleri kaldırılmıştır.
C# 9.0 Özellikleri
- Record
- Init only setter
- Top-level statement
- Pattern matching enhancement
- Performance ve interop
- Native sized integer
- Function pointer
- Suppress emitting localsinit flag
- Fit ve finish özellikleri
- Target-typed
new
expression static
anonim function- Target-typed conditional expression
- Covariant return type
- Extension
GetEnumerator
support forforeach
loop - Lambda discard parametere
- Local function’da attribute
- Target-typed
- Kod oluşturucu desteği
- Module initializer
- Partial metot için yeni özellikler
C# Versiyon 10 Yenilikleri / Özellikleri
Kasım 2021’de yayınlandı.
C# 10 sürümü, C# diline aşağıdaki özellikleri ve geliştirmeleri eklemiştir.
C# 10 Özellikleri
- Record struct
- Struct türlerinin iyileştirilmesi
- Interpolated string handler
global using
directiv- File-scoped namespace deklarasyonu
- Extended property pattern
- lambda expressions iyileştirmeleri
- Allow
const
interpolated strings - Improved definite assignment
- Allow both assignment and declaration in the same deconstruction
- Metotlarda
AsyncMethodBuilder
attribute kullanımı - CallerArgumentExpression attribute
- Enhanced
#line
pragma
C# Versiyon 11 Yenilikleri / Özellikleri
Kasım 2022’de yayınlandı.
Aşağıdaki özellikler C# 11’de eklendi.
C# 11 Özellikleri
- Raw string literal
- Generic math desteği
- Generic attribute
- UTF-8 string literal
- string interpolation ifadelerinde yeni düzenleme
- List pattern
- File-local type
- Required member
- Auto-default struct
- Pattern match
Span<char>
uygulama conststring
üzerinde - Genişletilmiş
nameof
scope - Numeric IntPtr
ref
field vescoped ref
- Warning wave 7