C'nin geçmişi#

Bu makale, C# dilinin her ana sürümünün geçmişini sağlar. C# ekibi yenilik yapmaya ve yeni özellikler eklemeye devam ediyor. Gelecek sürümler için dikkate alınan özellikler de dahil olmak üzere ayrıntılı dil özelliği durumu GitHub'daki dotnet/roslyn deposunda bulunabilir.

Önemli

C# dili, C# belirtiminin bazı özellikler için standart bir kitaplık olarak tanımladığı tür ve yöntemlere dayanır. .NET platformu bu tür ve yöntemleri bir dizi pakette sunar. Örneklerden biri özel durum işlemedir. Her throw deyim veya ifade, atılan nesnenin öğesinden Exceptiontüretildiğinden emin olmak için denetlendi. Benzer şekilde, yakalanan türün türünden Exceptiontüretildiğinden emin olmak için her catch denetlenmektedir. Her sürüm yeni gereksinimler ekleyebilir. Eski ortamlarda en son dil özelliklerini kullanmak için belirli kitaplıkları yüklemeniz gerekebilir. Bu bağımlılıklar, her belirli sürüm için sayfada belgelenmiştir. Bu bağımlılıkta arka plan için dil ve kitaplık arasındaki ilişkiler hakkında daha fazla bilgi edinebilirsiniz.

C# sürüm 11

Kasım 2022'de yayınlandı

C# 11'de aşağıdaki özellikler eklendi:

C# 11, genel matematiği ve bu hedefi destekleyen çeşitli özellikleri tanıtır. Tüm sayı türleri için sayısal algoritmaları bir kez yazabilirsiniz. Gerekli üyeler ve otomatik varsayılan yapılar gibi türlerle struct çalışmayı kolaylaştıracak daha fazla özellik vardır. Ham dize değişmez değerleri, dize ilişkilendirmelerinde yeni satır ve UTF-8 dize değişmez değerleri ile dizelerle çalışma daha kolay hale gelir. Dosya yerel türleri gibi özellikler kaynak oluşturucuların daha basit olmasını sağlar. Son olarak, liste desenleri desen eşleştirme için daha fazla destek ekler.

C# sürüm 10

Kasım 2021'de yayınlandı

C# 10, C# diline aşağıdaki özellikleri ve geliştirmeleri ekler:

Önizleme modunda daha fazla özellik sağlandı. Bu özellikleri kullanmak için projenizde olarak ayarlamanız <LangVersion>Preview gerekir:

C# 10, .NET Çalışma Zamanı için seremoni kaldırma, verileri algoritmalardan ayırma ve gelişmiş performans temaları üzerinde çalışmaya devam eder.

Özelliklerin çoğu, aynı kavramları ifade etmek için daha az kod yazabileceğiniz anlamına gelir. Kayıt yapıları, kayıt sınıflarının yaptığı yöntemlerin çoğunu sentezler. Yapılar ve anonim türler ifadelerle birlikte desteklenir. Genel kullanım yönergeleri ve dosya kapsamlı ad alanı bildirimleri , bağımlılıkları ve ad alanı kuruluşunu daha net ifade ettiğiniz anlamına gelir. Lambda geliştirmeleri , lambda ifadelerini kullanıldıkları yerde bildirmeyi kolaylaştırır. Yeni özellik desenleri ve yapısızlaştırma geliştirmeleri daha kısa kodlar oluşturur.

Yeni ilişkilendirilmiş dize işleyicileri ve AsyncMethodBuilder davranışı performansı artırabilir. Bu dil özellikleri .NET 6'da performans iyileştirmeleri elde etmek için .NET Çalışma Zamanı'nda uygulandı.

C# 10 ayrıca .NET sürümleri için yıllık tempoya daha fazla geçiş işareti ekler. Her özellik yıllık bir zaman diliminde tamamlanamadığından, C# 10'da birkaç "önizleme" özelliğini deneyebilirsiniz. Hem genel öznitelikler hem de arabirimlerdeki statik soyut üyeler kullanılabilir, ancak bu önizleme özellikleri son sürümünden önce değişebilir.

C# sürüm 9

Kasım 2020'de yayınlandı

C# 9, .NET 5 ile yayımlandı. .NET 5 sürümünü hedefleyen tüm derlemeler için varsayılan dil sürümüdür. Aşağıdaki yeni ve gelişmiş özellikleri içerir:

C# 9, önceki sürümlerden üç temanın devamını verir: tören kaldırma, algoritmalardan veri ayırma ve daha fazla yerde daha fazla desen sağlama.

Üst düzey deyimler , ana programınızın daha kolay okunduğu anlamına gelir. Törene daha az ihtiyaç vardır: ad alanı, Program sınıf ve static void Main() bunların hepsi gereksizdir.

girişinde records , eşitlik için değer semantiğini izleyen başvuru türleri için kısa bir söz dizimi sağlanır. Genellikle en düşük davranışı tanımlayan veri kapsayıcılarını tanımlamak için bu türleri kullanacaksınız. Yalnızca init ayarlayıcıları , kayıtlarda yıkıcı olmayan mutasyon (with ifadeler) için yetenek sağlar. C# 9 ayrıca türetilmiş kayıtların sanal yöntemleri geçersiz kılıp temel yöntemin dönüş türünden türetilmiş bir tür döndürebilmesi için birlikte değişken dönüş türleri ekler.

Desen eşleştirme özellikleri çeşitli yollarla genişletilmiştir. Sayısal türler artık aralık desenlerini destekliyor. Desenler , orve not desenleri kullanılarak andbirleştirilebilir. Daha karmaşık desenleri netleştirmek için parantezler eklenebilir:

C# 9, yeni desen eşleştirme geliştirmeleri içerir:

  • Tür desenleri belirli bir türle eşleşen bir nesneyle eşleşir
  • Ayraçlı desenler, desen birleşimlerinin önceliğini zorlar veya vurgular
  • Konjonktif and desenler her iki desenin de eşleşmesini gerektirir
  • Ayrık or desenlerin eşleşmesi için iki desen gerekir
  • Olumsuz desenler not için desenin eşleşmemesi gerekir
  • İlişkisel desenler , girişin belirli bir sabitten küçük, büyük, küçük veya eşit ya da daha büyük veya buna eşit olmasını gerektirir.

Bu desenler, desenlerin söz dizimini zenginleştirir. Şu örnekleri göz önünde bulundurun:

public static bool IsLetter(this char c) =>
    c is >= 'a' and <= 'z' or >= 'A' and <= 'Z';

daha yüksek önceliğe orsahip olduğunu and açıkça ifade etmek için isteğe bağlı parantezler ile:

public static bool IsLetterOrSeparator(this char c) =>
    c is (>= 'a' and <= 'z') or (>= 'A' and <= 'Z') or '.' or ',';

En yaygın kullanımlardan biri, null denetim için yeni bir söz dizimidir:

if (e is not null)
{
    // ...
}

Bu desenlerden herhangi biri, desenlere izin verilen herhangi bir bağlamda kullanılabilir: is desen ifadeleri, switch ifadeler, iç içe desenler ve bir switch deyimin case etiketinin deseni.

Başka bir özellik kümesi de C# dilinde yüksek performanslı bilgi işlemi destekler:

  • nint ve nuint türleri, hedef CPU'daki yerel boyutlu tamsayı türlerini modeller.
  • İşlev işaretçileri temsilci benzeri işlevler sağlarken, temsilci nesnesi oluşturmak için gerekli ayırmaları önler.
  • Yönergeleri localsinit kaydetmek için yönerge atlanabilir.

Performans ve birlikte çalışma

Başka bir geliştirme kümesi de kod oluşturucuların işlevsellik eklediği senaryoları destekler:

  • Modül başlatıcıları , bir derleme yüklendiğinde çalışma zamanının çağıran yöntemlerdir.
  • Kısmi yöntemler , yeni erişilebilir değiştiricileri ve geçersiz olmayan dönüş türlerini destekler. Böyle durumlarda bir uygulama sağlanmalıdır.

Özellikleri sığdırma ve bitirme

C# 9, hem kod yazma hem de okuma amacıyla geliştirici üretkenliğini artıran diğer birçok küçük özellik ekler:

  • Hedef tür new ifadeleri
  • static anonim işlevler
  • Hedef türü koşullu ifadeler
  • Döngüler için foreach uzantı GetEnumerator() desteği
  • Lambda ifadeleri atma parametrelerini bildirebilir
  • Öznitelikler yerel işlevlere uygulanabilir

C# 9 sürümü, C# dilini modern, genel amaçlı bir programlama dili olarak tutmak için çalışmaya devam eder. Özellikler modern iş yüklerini ve uygulama türlerini desteklemeye devam eder.

C# sürüm 8.0

Eylül 2019'da yayınlandı

C# 8.0, .NET Core'a özel olarak hedef alan ilk büyük C# sürümüdür. Bazı özellikler yeni CLR özelliklerine, diğerleri ise yalnızca .NET Core'a eklenen kitaplık türlerine dayanır. C# 8.0, C# diline aşağıdaki özellikleri ve geliştirmeleri ekler:

Varsayılan arabirim üyeleri CLR'de geliştirmeler gerektirir. Bu özellikler .NET Core 3.0 için CLR'ye eklendi. Aralıklar, dizinler ve zaman uyumsuz akışlar .NET Core 3.0 kitaplıklarında yeni türler gerektirir. Derleyicide uygulanırken null atanabilir başvuru türleri, bağımsız değişkenlerin ve dönüş değerlerinin null durumuyla ilgili anlam bilgisi sağlamak için kitaplıklara açıklama eklendiğinde çok daha kullanışlıdır. Bu ek açıklamalar .NET Core kitaplıklarına ekleniyor.

C# sürüm 7.3

Mayıs 2018'de yayınlandı

C# 7.3 sürümünün iki ana teması vardır. Bir tema, güvenli kodun güvenli olmayan kod kadar yüksek performanslı olmasını sağlayan özellikler sağlar. İkinci tema, mevcut özelliklerde artımlı iyileştirmeler sağlar. Bu sürümde yeni derleyici seçenekleri de eklendi.

Aşağıdaki yeni özellikler, güvenli kod için daha iyi performans temasını destekler:

  • Sabit alanlara sabitlemeden erişebilirsiniz.
  • Yerel değişkenleri yeniden atayabilirsiniz ref .
  • Dizilerde stackalloc başlatıcıları kullanabilirsiniz.
  • Deyimleri, deseni destekleyen herhangi bir türle kullanabilirsiniz fixed .
  • Daha genel kısıtlamalar kullanabilirsiniz.

Mevcut özelliklerde aşağıdaki geliştirmeler yapılmıştır:

  • Tanımlama grubu türleriyle ve != test == edebilirsiniz.
  • İfade değişkenlerini daha fazla konumda kullanabilirsiniz.
  • Otomatik uygulanan özelliklerin yedekleme alanına öznitelikler ekleyebilirsiniz.
  • Bağımsız değişkenler farklı in olduğunda yöntem çözümlemesi geliştirildi.
  • Aşırı yükleme çözümlemesinde artık daha az belirsiz durum var.

Yeni derleyici seçenekleri şunlardır:

  • -publicsign derlemelerinin Açık Kaynak Yazılım (OSS) imzasını etkinleştirmek için.
  • -pathmap kaynak dizinler için bir eşleme sağlamak için.

C# sürüm 7.2

Yayın Tarihi: Kasım 2017

C# 7.2 birkaç küçük dil özelliği ekledi:

  • Dizilerdeki stackalloc başlatıcılar.
  • Deseni destekleyen herhangi bir türe sahip deyimleri kullanın fixed .
  • Sabit alanlara sabitlemeden erişin.
  • Yerel değişkenleri yeniden atayın ref .
  • Bir yapının sabit olduğunu ve üye yöntemlerine parametre olarak in geçirilmesi gerektiğini belirtmek için türleri bildirinreadonly struct.
  • Bir bağımsız değişkenin in başvuru tarafından geçirildiğini ancak çağrılan yöntem tarafından değiştirilmediğini belirtmek için parametrelere değiştiriciyi ekleyin.
  • Yöntemin ref readonly değerini başvuruya göre döndürdüğünü ancak bu nesneye yazma işlemine izin vermediğini belirtmek için yöntem dönüşlerinde değiştiriciyi kullanın.
  • Yapı türünün yönetilen belleğe doğrudan eriştiği ve her zaman yığın ayrılması gerektiğini belirtmek için türleri bildirin ref struct .
  • Ek genel kısıtlamalar kullanın.
  • Girintili olmayan adlandırılmış bağımsız değişkenler
    • Adlandırılmış bağımsız değişkenlerin ardından konumsal bağımsız değişkenler gelebilir.
  • Sayısal değişmez değerlerde önde gelen alt çizgi
    • Sayısal değişmez değerler artık yazdırılan basamaklardan önce önde gelen alt çizgilere sahip olabilir.
  • private protected erişim değiştiricisi
    • Erişim değiştiricisi private protected , aynı derlemedeki türetilmiş sınıflar için erişimi etkinleştirir.
  • Koşullu ref ifadeler
    • Koşullu ifadenin (?:) sonucu artık bir başvuru olabilir.

C# sürüm 7.1

Ağustos 2017'de yayınlandı

C#, C# 7.1 ile nokta sürümlerini yayınlamaya başladı. Bu sürüm dil sürümü seçimi yapılandırma öğesini, üç yeni dil özelliğini ve yeni derleyici davranışını ekledi.

Bu sürümdeki yeni dil özellikleri şunlardır:

  • asyncMain Yöntem
    • Bir uygulamanın giriş noktası değiştiriciye async sahip olabilir.
  • default değişmez değer ifadeleri
    • Hedef tür çıkarılabildiğinde varsayılan değer ifadelerinde varsayılan değişmez değer ifadelerini kullanabilirsiniz.
  • Çıkarsanan demet öğe adları
    • Tanımlama grubu öğelerinin adları, çoğu durumda tanımlama grubu başlatma işleminden çıkarılabilir.
  • Genel tür parametrelerinde desen eşleştirme
    • Türü genel tür parametresi olan değişkenlerde desen eşleştirme ifadelerini kullanabilirsiniz.

Son olarak, derleyicinin iki seçeneği -refout vardır ve -refonly bu seçenek başvuru derlemesi oluşturmayı denetler

C# sürüm 7.0

Mart 2017'de yayınlandı

C# sürüm 7.0, Visual Studio 2017 ile yayımlandı. Bu sürümde C# 6.0'ın damarında bazı evrimsel ve havalı şeyler vardır. Yeni özelliklerden bazıları şunlardır:

Dahil olan diğer özellikler:

Bu özelliklerin tümü geliştiriciler için yeni özellikler ve her zamankinden daha temiz kod yazma fırsatı sunar. Vurgulama, anahtar sözcükle kullanılacak değişkenlerin bildirimini out daraltmak ve tanımlama grubu aracılığıyla birden çok dönüş değerine izin vermektir. .NET Core artık herhangi bir işletim sistemini hedeflemektedir ve gözlerini buluta ve taşınabilirliğe sağlam bir şekilde açmıştır. Bu yeni özellikler, yeni özelliklerin yanı sıra dil tasarımcılarının düşüncelerini ve zamanını da kaplar.

C# sürüm 6.0

Temmuz 2015'te yayınlandı

Visual Studio 2015 ile yayınlanan sürüm 6.0, C# programlamayı daha üretken hale getiren birçok küçük özellik yayımladı. Bunlardan bazıları şunlardır:

Diğer yeni özellikler şunlardır:

  • Dizin başlatıcıları
  • Catch/finally bloklarında bekle
  • Yalnızca alıcı özellikleri için varsayılan değerler

Bu özelliklerin her biri kendi başına ilginçtir. Ama bunlara tamamen bakarsanız, ilginç bir desen görürsünüz. Bu sürümde C# kodu daha ters ve okunabilir hale getirmek için dil ortaklarını ortadan kaldırmaya başladı. Yani temiz, basit kod hayranları için, bu dil sürümü büyük bir galibiyet oldu.

Kendi başına geleneksel bir dil özelliği olmasa da bu sürümle birlikte bir şey daha yaptılar. Roslyn'i hizmet olarak yayımladılar. C# derleyicisi artık C# dilinde yazılmıştır ve derleyiciyi programlama çabalarınızın bir parçası olarak kullanabilirsiniz.

C# sürüm 5.0

Ağustos 2012'de yayınlandı

Visual Studio 2012 ile yayımlanan C# sürüm 5.0, dilin odaklanmış bir sürümüdür. Bu sürüm için harcanan çabanın neredeyse tamamı başka bir çığır açan dil kavramına geçti: async zaman uyumsuz programlama için ve await modeli. Önemli özellikler listesi aşağıdadır:

Çağıran bilgi özniteliği, bir ton ortak yansıma koduna başvurmadan çalıştırdığınız bağlamla ilgili bilgileri kolayca almanıza olanak tanır. Tanılama ve günlüğe kaydetme görevlerinde birçok kullanımı vardır.

await Ama async bu yayının gerçek yıldızları. Bu özellikler 2012'de ortaya çıktığında C#, asenkronu birinci sınıf katılımcı olarak dile pişirerek oyunu yeniden değiştirdi. Uzun süre çalışan işlemlerle ve geri arama web'lerinin uygulanmasıyla ilgilendiyseniz, büyük olasılıkla bu dil özelliğini sevdiniz.

C# sürüm 4.0

Nisan 2010'da yayınlandı

Visual Studio 2010 ile yayınlanan C# sürüm 4.0, sürüm 3.0'ın temel atma durumuna kadar yaşamakta zorlanacaktı. Bu sürüm bazı ilginç yeni özellikler kullanıma sunulmuştur:

Katıştırılmış birlikte çalışma türleri, uygulamanız için COM birlikte çalışma derlemeleri oluşturmanın dağıtım acısını hafifletir. Genel kovaryans ve kontravaryans, genel değerleri kullanmanız için size daha fazla güç verir, ancak bunlar biraz akademiktir ve çerçeve ve kitaplık yazarları tarafından büyük olasılıkla takdir edilir. Adlandırılmış ve isteğe bağlı parametreler birçok yöntem aşırı yüklemelerini ortadan kaldırmanıza ve kolaylık sağlamanıza olanak sağlar. Ancak bu özelliklerin hiçbiri tam olarak paradigma olarak değiştirilmemiştir.

En önemli özellik anahtar sözcüğün dynamic kullanıma sunulmasıydı. dynamic C# sürüm 4.0'da derleme zamanı yazmada derleyiciyi geçersiz kılma özelliğiyle sunulan anahtar sözcük. dinamik anahtar sözcüğünü kullanarak JavaScript gibi dinamik olarak yazılan dillere benzer yapılar oluşturabilirsiniz. Bir oluşturabilir dynamic x = "a string" ve sonra buna altı ekleyebilirsiniz ve bundan sonra ne olacağını sıralamak için çalışma zamanına bırakabilirsiniz.

Dinamik bağlama, hata potansiyeli sunar ancak aynı zamanda dil içinde büyük güç sağlar.

C# sürüm 3.0

Yayın tarihi: Kasım 2007

C# sürüm 3.0, Visual Studio 2008 ile birlikte 2007'nin sonlarında geldi, ancak dil özelliklerinin tam teknesi aslında .NET Framework sürüm 3.5 ile birlikte gelecekti. Bu sürüm, C# büyümesinde önemli bir değişiklik olduğunu işaret etti. C#'i gerçekten genişletilebilir bir programlama dili olarak kurdu. Şimdi bu sürümdeki bazı önemli özelliklere göz atalım:

Geçmişe bakıldığında, bu özelliklerin çoğu hem kaçınılmaz hem de ayrılmaz görünüyor. Hepsi stratejik olarak birbirine uyuyor. C# sürümünün katil özelliğinin, DilLe Tümleşik Sorgu (LINQ) olarak da bilinen sorgu ifadesi olduğu düşünülmektedir.

Daha ayrıntılı bir görünüm, LINQ'in oluşturulduğu temel olarak ifade ağaçlarını, lambda ifadelerini ve anonim türleri inceler. Ancak her iki durumda da C# 3.0 devrim niteliğinde bir kavram sundu. C# 3.0, C# dilini karma Nesne Odaklı / İşlevsel bir dile dönüştürmenin temelini oluşturmayı başlatmıştı.

Özel olarak, artık koleksiyonlar üzerinde işlem gerçekleştirmek için SQL stili, bildirim temelli sorgular yazabilirsiniz. Tamsayı listesinin ortalamasını hesaplamak için bir döngü yazmak for yerine, bunu gibi basit bir şekilde list.Average()yapabilirsiniz. Sorgu ifadelerinin ve uzantı yöntemlerinin birleşimi, tamsayıların listesini çok daha akıllı hale getirdi.

C# sürüm 2.0

Yayın Tarihi: Kasım 2005

Şimdi Visual Studio 2005 ile birlikte 2005'te yayımlanan C# 2.0'ın bazı önemli özelliklerine göz atalım:

Diğer C# 2.0 özellikleri, mevcut özelliklere özellikler ekledi:

  • Getter/setter ayrı erişilebilirlik
  • Yöntem grubu dönüştürmeleri (temsilciler)
  • Statik sınıflar
  • Temsilci çıkarımı

C# genel bir Nesne Odaklı (OO) dili olarak başlamış olsa da, C# sürüm 2.0 bunu aceleyle değiştirdi. Genel türler ile türler ve yöntemler, tür güvenliğini korurken rastgele bir tür üzerinde çalışabilir. Örneğin, sahip List<T> olmak List<string> , bu dizelerde veya List<int> tamsayılarda yineleme yaparken tür güvenli işlemler yapmanıza veya gerçekleştirmenize olanak tanır. Genel değerleri kullanmak, her işlem için türünden ArrayList türetilen veya türeten türetilen bir ListInt tür oluşturmaktan Object daha iyidir.

C# sürüm 2.0 yineleyiciler getirdi. Bunu kısaca ifade etmek gerekirse, yineleyiciler döngüyle foreach bir List (veya diğer Numaralandırılabilir türler) içindeki tüm öğeleri incelemenize olanak sağlar. Dilin birinci sınıf bir parçası olarak yineleyicilere sahip olmak, dilin okunabilirliğini ve insanların kod hakkında mantık yürütme becerisini önemli ölçüde geliştirdi.

Ancak C# Java'yı biraz daha yakalamaya devam etti. Java, genel ve yineleyicileri içeren sürümleri zaten yayımlamıştı. Ancak diller birbirinden ayrılmaya devam ettikçe bu durum yakında değişecektir.

C# sürüm 1.2

Nisan 2003'te yayımlandı

C# sürüm 1.2, Visual Studio .NET 2003 ile birlikte gönderilir. Dille ilgili birkaç küçük geliştirme içeriyordu. En dikkat çekici olan, bu sürümden başlayarak, uygulandığında üzerinde adlı Dispose bir foreachIEnumerator döngüde oluşturulan kodun olmasıdır IEnumeratorIDisposable.

C# sürüm 1.0

Ocak 2002'de yayımlandı

Geri dönüp baktığınızda Visual Studio .NET 2002 ile yayınlanan C# sürüm 1.0, Java'ya çok benzerdi. ECMA için belirtilen tasarım hedeflerinin bir parçası olarak, "basit, modern, genel amaçlı nesne odaklı bir dil" olmaya çalıştı. O zamanlar Java gibi bakmak, bu erken tasarım hedeflerine ulaştığı anlamına geliyordu.

Ama şimdi C# 1.0'a bakarsanız, biraz başınızı dönersiniz. Yerleşik zaman uyumsuz özelliklerden ve kabul ettiğiniz genel özelliklerle ilgili bazı karmaşık işlevlerden yoksundu. Aslına bakılırsa, genel değerleri tamamen eksik. LINQ ne olacak? Henüz kullanılamıyor. Bu eklemelerin çıkması birkaç yıl sürer.

C# sürüm 1.0, bugünle karşılaştırıldığında özelliklerden arındırılmış görünüyordu. Kendinizi ayrıntılı kod yazarken bulursunuz. Ama yine de, bir yerden başla. C# sürüm 1.0, Windows platformunda Java'ya uygun bir alternatifti.

C# 1.0'ın başlıca özellikleri şunlardır:

Makaleilk olarak NDepend blog'da yayımlandı, Erik Dietrich ve Patrick Smacchia'nın izniyle.