C diyez

Doğru başlık: "  C #  ".

Teknik sınırlamalar nedeniyle, başlığın istenen tipografisi doğru şekilde gösterilemedi.

VS#
Logo.
C Sharp maddesinin açıklayıcı resmi
İlk versiyonun tarihi 2001
Paradigma Yapılandırılmış , zorunlu , nesne yönelimli
Yazar Microsoft
Son sürüm 9.0 (4 Eylül 2020)
Geliştirme sürümü 8.0
Yazıyor Statik , güçlü , aday
Lehçeler 1.0, 1.1, 1.2, 2.0 (ECMA), 3.0, 3.5, 4.0, 5.0, 6.0, 7.0, 7.1, 7.2, 7.3, 8.0, 9.0
Tarafından etkilenmiş C ++ , Java
Etkilenen Swift , Vala , F # , Kotlin , TypeScript
Uygulamalar Microsoft .NET , Mono , DotGNU
İşletim sistemi Çapraz platform
İnternet sitesi docs.microsoft.com/en-us/dotnet/csharp ve docs.microsoft.com/de-de/dotnet/csharp
Dosya uzantısı .cs

C # ( C keskin [ ler i ː . Σ ɑ ː p ] içinde İngiliz İngilizcesi ) bir olan dil arasında nesne yönelimli programlama , tarafından pazarlanan Microsoft 2002 yılından bu yana ve platform üzerinde genişletmek için tasarlanan Microsoft .NET .

C ++ 'dan türetilmiştir ve genel sözdizimini ve kavramları aldığı Java'ya çok yakındır , operatör aşırı yükleme , indeksleyiciler ve temsilciler gibi kavramlar ekler . Özellikle ASP.NET platformunda web uygulamaları geliştirmek için kullanılır .

Sunum

C #, Java gibi C ve C ++ dillerinden türetilmiş , güçlü bir şekilde yazılmış , nesne yönelimli bir programlama dilidir . Geliştirmek için kullanılan web uygulamaları , hem de masaüstü uygulamaları , web hizmetleri , komutları, widget'lar veya sınıf kitaplıkları . C # 'da uygulama, Java'da yapıldığı gibi sınıflardan birinin Main yöntemine sahip olduğu bir sınıflar paketidir .

C # ile geliştirilmesi amaçlanmaktadır .NET platformu , başarılı olmak için Microsoft tarafından oluşturulan bir teknoloji yığını COM .

C # 'teki yürütülebilir dosyalar derlemelere, ad alanlarına, sınıflara ve sınıf üyelerine bölünmüştür. Derleme, bir program (çalıştırılabilir) veya sınıf kitaplığı (dll) olabilen derlenmiş formdur. Bir derleme, MSIL'deki çalıştırılabilir kodu ve sembolleri içerir. MSIL kodu , .NET platformunun tam zamanında işlevi tarafından çalışma zamanında makine diline çevrilir .

.NET platformu

C #, .NET platformunda geliştirme için tasarlanmıştır. Bu teknolojik yığının kalbi , aşağıdakilerden oluşan .NET çerçevesidir :

.NET platformunun diğer bir ürünü, genellikle C # ile programlama için kullanılan bir araç olan Visual Studio .NET geliştirme ortamıdır .

Özellikler

C #, C ++ 'dan türetilmiş bir dildir , güvenli yazmanın yanı sıra nesne yönelimli dillerin kapsülleme , kalıtım ve çok biçimlilik olasılıklarını sağlar . C # 'da tüm türler nesnelerdir . Dil, bir çöp toplayıcıya ve bir istisna işleme sistemine sahiptir .

Güvenli tipleme, özellikle aşağıdaki işlemlerin reddedildiği anlamına gelir: başlatılmamış bir değişkenin kullanılması, bir dizinin sınırlarının ötesine erişme girişimi , sonuçları tahmin edilemeyen tür dönüşümleri , işlem aritmetiği sırasında sınırların aşılması .

Java olasılıklarının çoğu C # 'da bulunur ve C # ile yazılmış kod ile Java'daki eşdeğer kod arasında güçlü bir benzerlik vardır.

C # 'da değişkenler bir başvuru türünde veya bir değer türünde olabilir . Değer türleri, ilkel türler, numaralandırmalar, yapı ve null yapılabilir türlerdir . Başvuru türleri; sınıflar, arabirimler, diziler ve temsilcilerdir .

İlkel türler

İlkel türler sbyte, short, int, long, byte, ushort, uint, ulong, char, float, double, decimal ve bool'dur.

sınıf

C # dilinin en temel yapıları sınıflardır . Bunlar sabitler, alanlar, özellikler, dizinleyiciler, yöntemler, olaylar, operatörler, kurucular, yıkıcılar veya alt sınıflar içerebilir. Temel sınıflar dizge ve nesnedir.

yapı

Yapılar sınıflara benzer, ancak değer türleridir ve miras alınamazlar .

temsilci

Temsilci, belirli parametrelere sahip bir yönteme referanstır. Temsilciler, değişkenlere yöntemler atamak ve bunları parametre olarak iletmek için kullanılır.

Sıralama

Numaralandırılmış tür, bir dizi sabiti olan bir değer türüdür. Numaralandırılmış her türün temel bir türü vardır: sabitlerin değerlerine göre belirlenen ilkel bir tür.

boş değer atanabilir tür

Nullable'lar, ek olarak null olabilen ilkel türlerdir . Her ilkel tip T'nin ilişkili bir boş değer atanabilir T? Tipi vardır. Örneğin, int türünde bir değişken? int veya null içerebilir.

Sözdizimi

Örnek kod  :

using System; public class HelloWorld { public static void Main(string[] args) { Console.WriteLine("Hello world!"); } } Anahtar kelimeler

C # 1.0'daki anahtar kelimeler şunlardır:

abstract class event if new readonly as const explicit implicit null ref base continue extern in object return bool decimal false int operator sbyte break default finally interface out sealed byte delegate fixed internal override short case do float is params sizeof catch double for lock private stackalloc char else foreach long protected static checked enum goto namespace public string struct throw typeof unchecked using volatile switch true uint unsafe virtual while this try ulong ushort void

C # 2.0 ile 6.0 arasında eklenen anahtar sözcükler:

add dynamic join select alias equals let set ascending from nameof value async get on var await global orderby where by group partial when descending into remove yield

C ++ 'dan farklılıklar

Dilde C / C ++ 'dan bir dizi değişiklik vardır; aşağıdaki hususlara özellikle dikkat edilecektir:

  • İşaretçilerin doğrudan manipülasyonu yalnızca güvenli olmayan kod içinde yapılabilir ve yalnızca uygun izinlere sahip programlar güvenli olmayan kod bloklarını çalıştırabilir . İşaretçi manipülasyonunun çoğu, adresi doğrudan değiştirilemeyen güvenli referanslar aracılığıyla yapılır ve çoğu işaretçi ve tahsis işlemi bellek taşmalarına karşı kontrol edilir. İşaretçiler yalnızca çöp toplayıcı tarafından işlenen değer türlerine , nesne türlerine işaret edebilir, yalnızca referans verilebilir;
  • nesneler açıkça imha edilemez. Çöp toplayıcısı , artık bir nesne için bir referans olduğunda serbest bırakılmasının bellek ilgilenir. Bununla birlikte, yönetilmeyen türleri işleyen nesneler için IDisposable, kaynak serbest bırakıldığında gerçekleştirilecek işlemeyi belirtmek için arabirimi uygulamak mümkündür ;
  • Birden çok sınıf kalıtımı yasaktır, ancak bir sınıf sınırsız sayıda arabirim uygulayabilir ve bir arabirim birden çok arabirimden miras alabilir;
  • C #, C ++ 'dan çok daha fazla yazılmıştır ; tek örtük dönüşümler, farklı tamsayı aralıkları arasındaki ve türetilmiş bir türden bir ana türe olanlardır. Boole'lar ve tamsayılar arasında, numaralandırma üyeleri ve tamsayılar arasında veya bir void türüne işaretçiler arasında örtük bir dönüşüm gerçekleşmez (bu son nokta için Nesne türüne referansların kullanılması aynı etkiyi elde etmeye izin verse de). Kullanıcı tanımlı dönüştürmeler örtük veya açık olarak tanımlanabilir;
  • dizileri bildirmek için sözdizimi aynı değil: int[] a = new int[5]değiştirin int a[5]. Dinamik bir ayırma olduğu için, int [] a bir başvurunun bildirimi (başlatılmamışsa null). Bununla birlikte, bir dizinin yığın üzerinde manuel olarak tahsis edilmesi anahtar kelime ile mümkündür stackalloc ;
  • bir numaralandırmanın üyeleri kendi ad alanlarında toplanır  ;
  • C # şablonları yönetmez , ancak bu işlevsellik C # 2.0 ile görünen genel türlerle değiştirilmiştir ;
  • özellikler tanıtıldı ve üye verilerine erişmek için belirli bir sözdizimi sağlar (aynı zamanda birden çok iş parçacığı tarafından eşzamanlı erişimi kolaylaştırır );
  • mevcut yansıma toplam türleri;
  • İşlevlere işaret edenlerin listeleri olan delegeler, özellikle olay programlama için kullanılır.

Java'dan farklılıklar

C # Java'ya benzese de, bazı önemli farklılıklar vardır, örneğin:

  • Java, operatörün aşırı yüklenmesine izin vermez  ;
  • Java, C ++ 'da olduğu gibi C #' daki istisnalar kontrol edilmemişken, kontrol edilen istisnalara sahiptir;
  • Java, Javadoc sözdizimi açıklamalarını kullanarak kaynak dosyalardan HTML belgelerinin otomatik olarak oluşturulmasına izin verirken, C # XML tabanlı açıklamaları kullanır;
  • Java'nın önişlemci dili yoktur;
  • C #, dizinleyicileri, temsilci yöntemlerini ve olayları destekler (burada Java, Gözlemci tasarım modelinden memnun kalır );
  • C #, arabirimlerin ve soyut sınıfların anonim uygulamalarını desteklemez;
  • C # yalnızca statik iç sınıfları destekler;
  • C #, sınıflara ek olarak yapıları da destekler (yapılar değer türleridir  : adresi değil içeriği saklarız);
  • C #, yerel bir kitaplığı çağırmak için yerleşik bir dil (DllImport) ve taşınabilir sözdizimi kullanırken, Java Java Yerel Arabirimini kullanır  ;
  • C # , genelliği bütünleştirir ve .NET makinesi buna izin verecek şekilde değiştirilmiştir (Java da bunu bütünleştirir, ancak uygulaması Java bayt kodunu değiştirmeden javac derleyicisinde yapılmıştır ). Bu başarının teorik yönü hakkında daha fazla ayrıntı, referansın 70-89 . Slaytlarında bulunabilir .

Tarih

Eylül 2002'de .NET platformu ve C # halka tanıtıldı. C # bu platformun fiili dili haline geldi, ayrıca .NET platformunun bir parçasını uygulamak için de kullanıldı.

versiyonlar
Yıl Versiyon Kütüphane Ana değişiklik
2002 1.0 .NET framework 1.0 ve 1.1
2005 2.0 .NET framework 2.0 C # ve çerçeveye genellik eklendi
2008 3.0 .NET framework 3.5 LINQ (Dil ile entegre sorgular)
2010 4.0 .NET framework 4.0 dinamik türler
2012 5.0 .NET framework 4.5 zaman uyumsuz yöntemler
2015 6.0 .NET framework 4.6 linux sürümü
2016 7.0 .NET çerçevesi> = 4.5 Tuples, yerel işlevler
2019 8.0 .NET standardı> = 2.1 ve .NET Core> = 3.0 ReadOnly Üye, Birleştirme Atama Operatörü


C # 2.0

Microsoft ,Ekim 2005, uzun bir beta testi döneminden sonra, .NET kitaplığının 2.0 sürümü, hemen hemen tüm ilişkili araçların yeni bir sürümü ile birlikte. C # kuralın bir istisnası değildir ve bu nedenle aşağıdaki eklemelerle 2.0 sürümünde yayınlanmıştır:

  • Bir sınıfın uygulanmasının birkaç dosyaya dağıtılmasına izin veren kısmi sınıflar.
  • Jenerik türleri basit bir kopyası değildir, şablon C ++. Örneğin, C # jeneriklerinde tür kısıtlamasını buluruz (bir genellemede kullanılabilecek türleri belirtmek için). Öte yandan, ifadeleri genelleme için parametre olarak kullanmak imkansızdır.
  • Python'da bulunanla eşdeğer olan anahtar kelime aracılığıyla coroutinlerin kullanımına izin veren yeni bir yineleyici .yieldyield
  • Yapılandırılabilir kapanış kurallarına sahip anonim yöntemler .
  • "Null yapılabilir" türler, yani bir değer türünün null olabileceğini belirtme yeteneği. Bunlar soru işareti "? "Tipi adını takiben, bu gibi: int? i = null;.
  • Yeni çift soru işareti operatörü "?? »İki işlenen kullanır ve sıfır olmayan ilkini döndürür. "Null yapılabilir" türler için varsayılan bir değer belirtmek için tanıtıldı.

Referans olarak, 2.0 sürümünde tanıtılan yeni özelliklerin tüm özellikleri dış bağlantılarda mevcuttur .

Delphi'nin babası Anders Hejlsberg , bu röportajda (in) C #, Java ve C ++ 'da jeneriklerin uygulanması hakkında konuştu .

Boş değer atanabilir türlerin işlevselliği, sürüm 2.0'ın genel olarak yayınlanmasından yalnızca birkaç hafta önce düzeltildi, çünkü değişkenin değeri gerçekten sıfırsa, bu değişkenin geleneksel anlamda boş olmadığı ortaya çıktı, yani, boş bir referans değildir. Bu nedenle, sıfır değerli bir ilkel türü bir nesneye dönüştürmek, sıfır değerine sıfır olmayan bir referansla sonuçlandı. Bu sorunu düzeltmek için, CLR çekirdeğini düzeltmek ve .NET 2.0 aralığındaki (Visual Studio 2005, SQL Server 2005, C # ve VB.NET) tüm ürünler üzerinde çok sayıda kontrol ve düzeltme yapmak gerekliydi.

C # 3.0

C # 3.0, PDC 2005'te sunuldu. Son sürüm şu tarihten beri mevcuttur: 19 Kasım 2007Microsoft sitesinden indirmek için (tr) . Başlıca yeni özellikler aşağıdaki gibidir:

  • Anahtar kelimeler eklenmesi select, fromve whereoluşumunu ve yürütme SQL, XML sorguları veya doğrudan koleksiyonları izin vermek. Bu işlevsellik, Dil Tümleşik Sorgu (LINQ ) programının bir parçasıdır .
  • Bir nesneyi başlatmak için yeni olasılık: Bunun yerine Client c = new Client(); c.Nom = "Dupont";kullanabilirizClient c = new Client{ Nom = "Dupont" };
  • Lambda ifadeleri  : ListeTrucs.Where( delegate(Truc x) { return x.Size > 10; } );olurListeTrucs.Where( x => x.Size > 10 );
  • Yerel değişkenlerin türünün çıkarımı: string s = "Dupont"ile değiştirilebilirvar s = "Dupont"
  • Anonim türlerin tanıtımı: var x = new { Nom = "Dupont" }yerine kullanılabilirclass __anonymous { private string _nom; public string Nom { get { return _nom; } set { _nom = value; } } } __anonymous x = new __anonymous(); x.Nom = "Dupont";
  • İfade ağaçları: Kodun, kolayca ayrıştırılan ve değiştirilen nesnelerin ağaçları şeklinde derlenmesine izin verir.
  • Genişletilmiş yöntemler: bir birinci parametre ekleyerek bir sınıfa yöntemler eklemenize olanak tanır this.

C # 3.0 ve LINQ'ya genel bir bakış .NET Framework Geliştirme Merkezi sayfasında bulunabilir .

Yapılan iyileştirmeler tamamen sözdizimsel olduğundan veya derleme zamanında telafi edilen kısayollardan oluştuğundan, C # 3.0'da derlenen kod 2.0 ile tamamen uyumludur. Ancak, sürüm 3.5 kitaplıklarında (LINQ, vb.) Sunulan yeni özellikler, C # 'ın önceki sürümleriyle kullanılamaz.

Bu sürüm, Windows XP veya üstünü ( Vista veya Windows 7 ) gerektirir. Windows 2000 için mevcut değildir .

C # 4.0

Versiyon 4 dil birkaç yeni özellik sunar:

  • anahtar kelimeyi kullanarak değişkenlerin dinamik yazımı dynamic ;
  • adlandırılmış ve isteğe bağlı argümanlar;
  • arabirimler ve genel temsilciler için kovaryans ve kontravans desteği.

.NET 4.0 framework serbest bırakıldı12 Nisan 2010, Visual Studio 2010 ile birlikte . Diğerlerinin yanı sıra şunları sunar:

  • yeni paralel kitaplık: Görev Paralel Kitaplığı  ;
  • LINQ kullanımıyla Veritabanı Erişimi için Entity Framework'ün optimize edilmiş bir sürümü ;
  • LINQ'nun paralel sürümü PLINQ olarak adlandırılır.

C # 5.0

Sürüm 5 Dil basitçe anahtar kelimeler ekleyerek asenkron programlarını programlamak için kullanılan asyncve await.

Döngüdeki kapanışların davranışı foreachdeğiştirildi. Kapanmaforeach problemlerinden kaçınmak için artık bir döngüye yerel bir değişken eklemek gerekli değildir .

Ayrıca, bir özelliği çağıran yöntemin adını bilmeye izin veren arayanla ilgili bilgilere de dikkat edin.

C # 6.0

C # 'ın altıncı sürümü, aşağıdakiler dahil çeşitli değişiklikler yapar:

Otomatik olarak uygulanan özellikler (veya otomatik özellikler), alanlara erişimi basitçe kapsayan özelliklerin bildirimini basitleştirmek için ilk olarak C # 3'te ortaya çıktı. Kodu daha kısa yapsalar da, bir dezavantajları vardır: bunları bildirim düzeyinde başlatmak mümkün değildir, mutlaka kurucuda yapılmalıdır. Ayrıca, otomatik özellikleri salt okunur hale getirmek mümkün değildir, çünkü onların mutatörleri (ayarlayıcıları) yoktur ve bu nedenle onlara bir değer atayamıyoruz.

C # 6, otomatik özelliklerin bildirim seviyesinde başlatılmasına izin vererek bu sorunu çözer.

Standardizasyon

C #, ECMA (ECMA-334) tarafından standartlaştırılmıştır .Aralık 2001ve ISO / IEC ( ISO / IEC 23270 ) tarafından 2003'te .

Değişimler Sürüm 2.0 ile standardize edilmiş ECMA içinde (ECMA-334)Haziran 2006ve ISO / IEC ( ISO / IEC 23270: 2006 ) tarafındanEylül 2006.

Microsoft, C # tarafından kullanılan bazı kitaplıkların kaynak kodunu Ekim 2007altında Microsoft Referans Kaynak Lisansı (MS-RSL).

Dil adı

ECMA 334 standardı ve ISO 23270, dilin adını Unicode karakteri 0043 (büyük harf C) ve ardından 0023 (#) karakteri olarak tanımlar . "C diyez" olarak telaffuz edilir ve "C diyez" olarak telaffuz edilir, "keskin" aslında müzik sembolünü belirtir symbol ama # bunun yerine çarpı ("hash") sunan bir bilgisayar klavyesinden kolay erişim için gereklidir.
"C #" adı, yazılı notanın bir noktalı ton ile artırılması gerektiğini belirten keskin bir işaretin bulunduğu müzik notasyonundan esinlenmiştir. Bu, C ++ dil adına benzer; burada "++", bir değişkenin değerlendirildikten sonra 1 artırılması gerektiğini belirtir. # Sembolü ayrıca dört "+" sembolden oluşan bir bitişik yapıya benziyor (ikiye iki ızgarada), bu da dilin C ++ 'nın bir artışı olduğu anlamına gelir.

C++ ++

Ekler

Dış bağlantılar

Kaynakça

  • C # ve .NET - Gérard Leblanc - 2002 - Éditions Eyrolles - ( ISBN  2-212-11066-9 )
  • C # ve .NET Sürüm 2 - Gérard Leblanc - 2006 - Éditions Eyrolles - ( ISBN  2-212-11778-7 )
  • C # Head First - Andrew Stellman, Jennifer Greene - 2008 - Éditions Digit Books - ( ISBN  978-2-81500-001-7 )
  • C # 'a Giriş - Pierre-Yves Saumont, Antoine Mirecourt - 2001 - Éditions Eyrolles - ( ISBN  2-7464-0301-3 )
  • C # Hayatta Kalma Rehberi - Gilles Tourreau - 2010 - Pearson Education - ( ISBN  978-2-7440-2432-0 )
  • Benoît Prieur, C # programlama: MCSA sertifikalarına hazırlık - Sınav 70-483 , ENI sürümleri,16 Mayıs 2018, 448   s. ( ISBN  978-2-409-01382-9 , OCLC  1038026533 )
  • (tr) C # 2005 Programcı Referansı - Adrian Kingsley-Hughes, Kathie Kingsley-Hughes - 2006 - Wrox Sürümü - ( ISBN  0-470-04641-4 )
  • (en) C # Essentials, 2. Baskı - Ben Albahari, Peter Drayton, Brad Merrill - 2002 - O'Reilly Media Edition - ( ISBN  0-596-00315-3 )
  • (tr) Professional C #, 3rd Edition - Simon Robinson, Christian Nagel, Karli Watson, Jay Glynn, Morgan Skinner, Bill Evjen - 2004 - Wrox Edition - ( ISBN  0-7645-5759-9 )

Notlar ve referanslar

  1. (fr) [1]
  2. "  https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8  " (Erişim tarihi 3 Temmuz 2019 )
  3. (en) Balagurusamy, C # Programlama , Tata McGraw-Hill Education - 2008, ( ISBN  9780070667570 )
  4. (en) Anders Hejlsberg - Mads Torgersen - Scott Wiltamuth - Peter Golde, The C # Programming Language (Covering C # 4.0), Portable Documents , Addison-Wesley Professional - 2010, ( ISBN  9780132481724 )
  5. (en) Mark Michaelis - Eric Lippert, Essential C # 6.0 , Addison-Wesley Professional - 2015, ( ISBN  9780134176130 )
  6. (tr) MSDN sitesi
  7. (inç) MPRI [PDF] alt tiplemesi sırasında destek , slaytlar 73-80 .
  8. http://msdn.microsoft.com/fr-fr/library/vstudio/dd264739(v=vs.100).aspx
  9. (in) Sitesi MSDN .
  10. http://blogs.msdn.com/b/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-consaceful-harmful.aspx
  11. http://msdn.microsoft.com/fr-fr/library/hh534540.aspx
  12. Thomas Levesque , "  New features in C # 6  " (erişim tarihi 19 Eylül 2015 ) .
  13. Microsoft Referans Kaynak Lisansı (MS-RSL)
  14. ECMA 334, s. 11