C Sharp (programmalastırıw tili)
| C# | |
|---|---|
| Paradigma | Kóp paradigmalı: strukturalıq, imperativ, obyektke baǵdarlanǵan, waqıyaǵa baǵdarlanǵan, wazıypaǵa baǵdarlanǵan, funkcional, ulıwma, reflektiv, parallel |
| Shańaraǵı | C |
| Dúziwshi | Anders Xeylsberg (Microsoft) |
| Islep shıǵarıwshı | Mads Torgersen (Microsoft) |
| Birinshi payda bolıwı | 2000 |
| Turaqlı reliz | 14.0 / 9-iyun 2025 |
| Tiplestiriw tártibi | Statikalıq, dinamikalıq, kúshli, qáwipsiz, nominal, tolıq emes shıǵarılǵan |
| Yadtı basqarıw | Qoqımlardı jıynawshı |
| Platforma | Common Language Infrastructure |
| Licenziya | Roslyn kompilyator: MIT/X11 .NET Core CLR: MIT/X11 |
| Fayl keńeytpeleri | .cs, .csx |
| Veb-sayt | learn.microsoft.com/en-us/dotnet/csharp/ |
C# (/ˌsiː ˈʃɑːrp/ si SHARP dep oqıladı) — bul kóp paradigmalardı qollap-quwatlaytuǵın ulıwma maqsetli joqarı dárejeli programmalastırıw tili. C# statikalıq tiplestiriw, kúshli tiplestiriw, leksikalıq kólem, imperativ, deklarativ, funkcional, ulıwma, obyektke baǵdarlanǵan (klassqa tiykarlanǵan) hám komponentke baǵdarlanǵan programmalastırıw tártiplerin óz ishine aladı.
C# programmalastırıw tiliniń tiykarǵı dizaynerleri Microsoft tan Anders Xeylsberg, Skott Viltamut hám Piter Gold boldı. Ol birinshi ret 2000-jıl iyul ayında keń tarqatıldı hám keyinirek 2002-jılı Ecma (ECMA-334) hám 2003-jılı ISO/IEC (ISO/IEC 23270 hám 20619) tárepinen xalıqaralıq standart retinde tastıyıqlandı. Microsoft C# tı texnikalıq jaqtan jabıq kodlı bolǵan .NET Framework hám Microsoft Visual Studio menen birge usındı. Sol waqıtta Microsofttıń ashıq kodlı ónimleri joq edi. Tórt jıldan keyin, 2004-jılı Mono dep atalǵan biypul hám ashıq kodlı proekt baslandı, ol C# programmalastırıw tili ushın kross-platformalı kompilyator hám orınlanıw ortalıǵın usındı. On jıldan keyin, Microsoft Visual Studio Code (kod redaktorı), Roslyn (kompilyator) hám birlesken .NET platformasın (programmalıq támiynat freymvorkı) shıǵardı, olardıń barlıǵı C# tı qollap-quwatlaydı hám biypul, ashıq kodlı hám kross-platformalı. Mono da Microsoft-qa qosıldı, biraq .NET ke biriktirilmedi.
2025-jıl aprel ayına kelip [jańalanǵan], tildiń eń sońǵı turaqlı versiyası C# 14[1][2][3].
Dizayn maqsetleri
Ecma standartı C# ushın tómendegi dizayn maqsetlerin kórsetedi:[4]
- Til ápiwayı, zamanagóy, ulıwma maqsetli, obyektke baǵdarlanǵan programmalastırıw tili bolıwǵa arnalǵan.
- Til hám onıń implementaciyaları qatań tip tekseriwi, massiv shegaraların tekseriw, inicializaciyalanbaǵan ózgeriwshilerdi paydalanıwǵa urınıwlardı anıqlaw hám avtomat qoqım jıynaw sıyaqlı programmalıq támiynat injeneriyası principlerin qollap-quwatlawı kerek. Programmalıq támiynattıń bekkemligi, turaqlılıǵı hám baǵdarlamashı ónimliligi áhmiyetli.
- Til bólistirilgen ortalıqlarda jaylastırıwǵa qolaylı programmalıq támiynat komponentlerin islep shıǵıwda paydalanıw ushın arnalǵan.
- Portativlik derek kodı hám baǵdarlamashılar ushın, ásirese C hám C++ penen tanıs bolǵanlar ushın júdá áhmiyetli.
- Internacionallastırıwdı qollap-quwatlaw júdá áhmiyetli.
- C# quramalı operaciyalıq sistemalardı qollanatuǵın júdá úlkennen baslap, arnawlı funkciyaları bar júdá kishkenege shekem, ornalastırılǵan hám xostlanǵan sistemalar ushın qosımshalar jazıwǵa qolaylı bolıwǵa arnalǵan.
- C# qosımshalarınıń yad hám processor quwatı talapları boyınsha únemli bolıwǵa arnalǵan bolsa da, til C yamasa assembler tili menen ónimlilik hám kólem boyınsha tikkeley básekilesiwge arnalmaǵan[5].
Tariyxı
.NET Framework ti islep shıǵıw waqtında, klass kitapxanaları dáslep Simple Managed C (SMC) dep atalǵan basqarılatuǵın kod kompilyator sisteması járdeminde jazılǵan[6][7]. 1999-jıl yanvar ayında Anders Xeylsberg sol waqıtta COOL dep atalǵan, «C-ge uqsas obyektke baǵdarlanǵan til» degen mánisti bildiretuǵın jańa til dúziw ushın komanda dúzdi[8].
Microsoft «COOL (C-ge uqsas Obyektke Baǵdarlanǵan Til)» atın tildiń sońǵı atı retinde saqlap qalıwdı qarastırǵan, biraq tovar belgisi sebepleri boyınsha onı islemewdi tańladı. .NET proekti 2000-jıl iyul ayında Kásiplik Baǵdarlamashılar Konferenciyasında kópshilikke járiyalanǵan waqıtta, til C# dep qayta atalǵan edi hám klass kitapxanaları menen ASP.NET orınlanıw ortalıǵı C# qa kóshirilgen edi.
Xeylsberg Microsoftta C# tıń bas dizayneri hám jetekshi arxitektorı bolǵan hám aldın Turbo Pascal, Embarcadero Delphi (burınǵı CodeGear Delphi, Inprise Delphi hám Borland Delphi) hám Visual J++ dizaynına qatnasqan. Intervyularda hám texnikalıq maqalalarda, ol kópshilik tiykarǵı programmalastırıw tillerindegi (mısalı, C++, Java, Delphi hám Smalltalk) kemshilikler Common Language Runtime (CLR) nıń tiykarların qáliplestirgenin, bul bolsa óz gezeginde C# tiliniń dizaynına tásir etkenin aytqan[9].
1994-jılı Java programmalastırıw tilin jaratqan Djeyms Gosling hám Java-nıń tiykarshısı Sun Microsystems tiń birge tiykar salıwshısı Bill Djoy, C# tı Javanıń «eliklewi» dep atadı; Gosling bunnan tısqarı bılay dedi: «[C# bul] isenimlilik, ónimlilik hám qáwipsizlik óshirilgen Java sıyaqlı»[10][11].
2000-jıl iyul ayında Xeylsberg C# tıń «Java klonı emes» ekenin hám dizaynı jaǵınan «C++ ke ádewir jaqın» ekenin ayttı[12].
2005-jıl noyabrde C# 2.0 shıqqannan berli, C# hám Java tilleri tez pát penen hár túrli trayektoriyalarda rawajlandı hám ekewi de bir-birinen ádewir ayırmashılıq etetuǵın tillerge aylandı. Birinshi iri ayırmashılıqlardıń biri ekewine de generiklerdiń qosılıwı menen boldı, bunda implementaciyaları oǵada ayırmashılıq etti. C# basqa hár qanday klass sıyaqlı paydalanılıwı múmkin bolǵan «birinshi dárejeli» generik obyektlerdi usınıw ushın reifikaciyanı paydalanadı, bunda kod generaciyası klasstı júklew waqtında orınlanadı[13].
C# sonday-aq funkcional stildegi programmalastırıwdı qollap-quwatlaw ushın bir neshe tiykarǵı ózgeshelikler qostı, bul C# 3.0 menen shıǵarılǵan LINQ keńeytpeleri hám onı qollap-quwatlaytuǵın lyambda ańlatpaları, keńeytpe metodları hám anonim tipleri freymvorkı menen shıńına jetti[14]. Bul ózgeshelikler C# baǵdarlamashılarına, eger olardıń qosımshasına paydalı bolsa, jabıwlar sıyaqlı funkcional programmalastırıw texnikaların qollanıwǵa imkaniyat beredi. LINQ keńeytpeleri hám funkcional importlar baǵdarlamashılarǵa maǵlıwmatlar bazasınan soraw jiberiw, XML faylın parslaw yamasa maǵlıwmatlar strukturasın izlew sıyaqlı ádettegi wazıypalardaǵı shablon kodınıń muǵdarın azaytıwǵa járdem beredi, oqıwǵa qolaylılıqtı hám qollap-quwatlawdı jaqsılaw ushın itibarın haqıyqıy programma logikasına awdaradı[15].
C# tıń burınǵı tumarı bar edi, ol Endi dep atalatuǵın edi (Anders Xeylsberg atına). Ol 2004-jıl 29-yanvarda paydalanıwdan shıǵarıldı[16].
C# dáslep ISO/IEC JTC 1 SC 22 kishi komitetine kórip shıǵıw ushın jiberildi,[17] ISO/IEC 23270:2003 boyınsha,[18] qaytarıp alındı hám sońınan ISO/IEC 23270:2006 boyınsha tastıyıqlandı[19]. 23270:2006 versiyası 23270:2018 boyınsha qaytarıp alındı hám usı versiya menen tastıyıqlandı[20].
Atı
Microsoft birinshi ret C# atın 1988-jılı inkremental kompilyaciya ushın proektlestirilgen C tiliniń bir variantı ushın paydalanǵan edi[21]. Bul proekt tamamlanbadı hám atı keyinirek qayta qollanıldı.
«C sharp» atı muzıkalıq notaciyadan ilhamlanǵan, onda sharp belgisi jazılǵan notanıń yarım ton joqarı bolıwı kerekligin bildiredi[22]. Bul C++ tili atına uqsas, bunda «++» ózgeriwshiniń mánis berilgennen keyin keyin 1-ge arttırılıwı kerekligin bildiredi. Sharp belgisi sonıń menen birge tórt «+» belgileriniń (eki-eki torında) ligaturasına uqsaydı, bul tildiń C++ tiń kóbeytilgeni ekenin jáne de ańlatadı[23].
Kórsetiwdiń texnikalıq sheklewleri (standart shriftler, brauzerler hám t.b.) hám kópshilik klaviatura jaylasıwlarında sharp belgisi (U+266F ♯ music sharp sign (♯)) bolmaǵanlıqtan, nomer belgisi (U+0023 # number sign (#)) programmalastırıw tiliniń jazba atında sharp belgisin jaqınlastırıw ushın tańlandı. Bul konvenciya ECMA-334 C# Til Specifikaciyasında sáwlelengen.
«sharp» qosımtası bar bolǵan tillerdiń variantları bolǵan bir qatar basqa Microsoft .NET úylesimli/sáykes tiller tárepinen qollanılǵan, sonıń ishinde J# (Microsoft tárepinen proektlestirilgen, Java 1.1 den alınǵan .NET tili), A# (Ada-dan) hám funkcional programmalastırıw tili F#[24]. .NET ushın Eiffel-diń dáslepki implementaciyası Eiffel# dep atalǵan,[25] bul at tolıq Eiffel tili endi qollap-quwatlanǵanlıqtan bas tartılǵan. Bul qosımta sonıń menen birge Gtk# (GTK hám basqa GNOME kitapxanaları ushın .NET qaplaması) hám Cocoa# (Cocoa ushın qaplama) sıyaqlı kitapxanalar ushın da qollanılǵan.
Sintaksis
C# tiliniń tiykarǵı sintaksisi C, Objective-C, C++ hám Java sıyaqlı basqa C-stildegi tillerge uqsas, ásirese:
- Útirli noqatlar operatorlardıń sońın belgilew ushın qollanıladı.
- Figuralı qawsırmalar operatorlardı gruppalaw ushın qollanıladı. Operatorlar ádette metodlarǵa (funkciyalarǵa), metodlar klasslarǵa, al klasslar atlar keńisliklerine gruppalanadı.
- Ózgeriwshilerge teńlik belgisi arqalı mánis beriledi, biraq eki izbe-iz teńlik belgisi arqalı salıstırıladı.
- Kvadrat qawsırmalar massivler menen qollanıladı, olardı járiyalaw ushın da, olardıń birindegi belgili bir indekste mánis alıw ushın da.
- «class», «int» hám «void» C-stildegi kompyuter programmalastırıw tillerinde kóbinese iri (ádette tiykarǵı) programma funkciyaların skriptlerde anıqlaw ushın qollanıladı.
Ayrıqsha ózgeshelikler
C# tıń C, C++ hám Javadan ayırıp turatuǵın ayırım belgili ózgeshelikleri tómendegiler:
Portativlik
Dizaynı boyınsha, C# tiykarındaǵı Common Language Infrastructure-ni (CLI) eń tikkeley sáwlelendiretuǵın programmalastırıw tili bolıp tabıladı. Onıń kópshilik ishki tipleri CLI (Common Language Infrastructure) freymvorkı tárepinen ámelge asırılǵan mánis-tiplerine sáykes keledi. Degen menen, til specifikaciyası kompilyatordıń kod generaciyalaw talapların kórsetpeydi: yaǵnıy, ol C# kompilyatorınıń Common Language Runtime (CLR)-ǵa baǵdarlanıwı kerek ekenin, ya bolmasa Common Intermediate Language (CIL) generaciyalawı kerek ekenin, yaki basqa da arnawlı bir format generaciyalawı kerek ekenin kórsetpeydi. Ayırım C# kompilyatorları sonıń menen birge Objective-C, C, C++, Assembler hám Fortrannıń dástúrli kompilyatorları sıyaqlı mashina kodın da generaciyalay aladı[26][27].
Tiplestiriw
C# var gilt sózi menen qatań, jasırın túrde tiplestirilgen ózgeriwshi járiyalanıwların hám new[] gilt sózi menen birge kollekciya inicializatorı arqalı jasırın túrde tiplestirilgen massivlerdi qollap-quwatlaydı.
Onıń tip sisteması eki shańaraqqa bólinedi: Mánis tipleri, ornatılǵan sanlı tipler hám paydalanıwshı anıqlaǵan strukturalar sıyaqlı, olar parametr retinde paydalanılǵanda avtomat túrde kóshirmeler retinde beriledi, hám silteme tipleri, massivler, klass úlgileri hám qatarlar sıyaqlı, olar tek sáykes obyektke kórsetkish beredi. Teńlik operatorın arnawlı qayta islewleri hám ózgermeytuǵınlıǵı sebepli, qatarlar barlıq ámeliy maqsetler ushın mánisler sıyaqlı isley aladı. Baǵdarlamashı olardı hátte case belgileri retinde de paydalana aladı. Zárúr bolǵanda, mánis tipleri avtomat túrde qutıǵa salınadı[28].
C# qatań logikalıq maǵlıwmat tipin, bool-dı qollap-quwatlaydı. while hám if sıyaqlı shártlerdi alatuǵın operatorlar true logikalıq mániske bahalanatuǵın tipli ańlatpanı talap etedi. C++ te logikalıq tipi bolsa da, ol pútin sanlarǵa hám onnan erkin túrlendire aladı hám if (a) sıyaqlı ańlatpalar tek a-nıń bool-ǵa túrlendiriliwi múmkinligin talap etedi, bul a-nıń int yamasa kórsetkish bolıwına múmkinshilik beredi. C# bul «pútin san durıs yamasa jalǵan degen mánisti bildiredi» degen usıldı biykar etedi, sebebi baǵdarlamashılardı tek bool qaytaratuǵın ańlatpalardı paydalanıwǵa májbúrlew if (a = b) (teńlik == ornına mánis beriw = paydalanıw) sıyaqlı belgili bir túrdegi programmalastırıw qáteleriniń aldın alıwı múmkin dep esaplaydı.
C# C++ ke qaraǵanda tip jaǵınan qáwipsizirek. Standart boyınsha jalǵız jasırın túrlendiriwler — bul pútin sanlardı keńeytiw sıyaqlı qáwipsiz dep esaplanatuǵınlar. Bul kompilyaciya waqtında, dál waqtında kompilyaciya dawamında hám ayırım jaǵdaylarda orınlanıw waqtında májbúrlenedi. Logikalıq hám pútin sanlar arasında, sonday-aq sanap ótiw aǵzaları menen pútin sanlar arasında hesh qanday jasırın túrlendiriw bolmaydı (tek 0 literalı bunnan tısqarı, ol qálegen sanaw tipine jasırın túrlendiriliwi múmkin). Hár qanday paydalanıwshı anıqlaǵan túrlendiriw anıq yamasa jasırın dep anıq belgileniwi kerek, C++ kóshirip alıw konstruktorları hám túrlendiriw operatorlarınan ayırmashılıǵı, olar ekewi de standart boyınsha jasırın.
C# ulıwma tiplerde kovariantlılıq hám kontravariantlılıqtı anıq qollap-quwatlaydı, C++ ten ayırmashılıǵı, ol virtual metodlarda qaytarılatuǵın tiplerdiń semantikası arqalı kontravariantlılıqtıń belgili bir dárejesin qollap-quwatlaydı.
Sanaw aǵzaları ózleriniń jeke kólemine jaylastırılǵan.
C# tili global ózgeriwshilerge yamasa funkciyalarǵa ruqsat etpeydi. Barlıq metodlar hám aǵzalar klasslar ishinde járiyalanıwı kerek. Kópshilik klasslarınıń statikalıq aǵzaları global ózgeriwshiler menen funkciyalardıń ornın basa aladı.
Lokal ózgeriwshiler C hám C++ tillerinen ayırmashılıǵı, ózin qorshap turǵan bloktıń ózgeriwshilerin jasıra almaydı, biraq tip dárejesindegi atlardı jasıra aladı.
Metaprogrammalastırıw
Metaprogrammalastırıwǵa bir neshe usıl menen erisiwge boladı:
- Refleksiya .NET API-leri arqalı qollap-quwatlanadı, olar tip metamaǵlıwmatların tekseriw hám dinamikalıq metod shaqırıw sıyaqlı scenariylerge imkaniyat beredi.
- Ańlatpa terekleri[29] kodtı abstrakt sintaksis teregi retinde kórsetedi, bunda hárbir túyin tekseriliwi yamasa orınlanıwı múmkin bolǵan bir ańlatpa bolıp tabıladı. Bul orınlanıw waqtında orınlanatuǵın kodtı dinamikalıq ózgertiwge imkaniyat beredi. Ańlatpa terekleri tilge biraz gomoikonlılıq kirgizedi.
- C# tilinde atributlar dep atalatuǵın, Javadaǵı annotaciyalarǵa ekvivalent bolǵan tiplerge, aǵzalarǵa yamasa pútkil jıynaqlarǵa biriktiriliwi múmkin bolǵan metamaǵlıwmatlar. Atributlar kompilyatorǵa da, refleksiya arqalı kodqa da qoljetimli, bul olardıń óz minez-qulqın sáykeslestiriwge imkaniyat beredi[30]. Kóp jergilikli atributlar GCC hám VisualC++ tiń platformaǵa ǵárezli preprocessor direktivalarınıń funkcional imkaniyatların qaytalaydı.
System.Reflection.Emitatlar keńisligi,[31] ol orınlanıw waqtında metamaǵlıwmat hám CIL (tipler, jıynaqlar hám t.b.) shıǵaratuǵın klasslardı óz ishine aladı.- .NET Kompilyator Platforması (Roslyn) til kompilyaciya xızmetlerine API kiriw imkaniyatın beredi, bul .NET qosımshaları ishinen C# kodın kompilyaciyalawǵa imkaniyat beredi. Ol kodtıń sintaksislik (leksikalıq) analizi, semantikalıq analizi, CIL-ǵa dinamikalıq kompilyaciyalaw hám kod shıǵarıw ushın API-lerdi usınadı[32].
- Derek generatorları,[33] Roslyn C# kompilyatorınıń bir ózgesheligi, kompilyaciya waqtında metaprogrammalastırıwǵa múmkinshilik beredi. Kompilyaciya procesi dawamında baǵdarlamashılar kompilyatordıń API-i menen kompilyaciyalanıp atırǵan kodtı tekserip, kompilyaciyalanıwı kerek bolǵan qosımsha generaciyalanǵan C# derek kodın bere aladı.
Metodlar hám funkciyalar
C# taǵı metod — bul funkciya retinde shaqırılıwı múmkin bolǵan klasstıń bir aǵzası, al maydannıń (yaǵnıy, klass yamasa úlgi ózgeriwshisi) tek mánisti saqlaw imkaniyatınan ayırmashılıq etedi[34]. C++ hám ANSI C sıyaqlı basqa sintaksislik uqsas tillerdegidey, metodtıń qoltańbası tómendegi tártiptegi járiyalanıwdan ibarat: qálegen qosımsha kiriw gilt sózleri (private sıyaqlı), onıń qaytarılatuǵın tipiniń anıq specifikaciyası (int sıyaqlı, yamasa eger hesh qanday mánis qaytarılmasa, void gilt sózi), metodtıń atı hám aqırında, hárbiri parametrdiń tipin, onıń formal atın hám qosımsha túrde, hesh qanday berilmegen jaǵdayda qollanılatuǵın standart mánisti óz ishine alǵan útir menen ajıratılǵan parametr specifikaciyalarınıń qawsırmalı izbe-izligi. Kópshilik basqa tillerden ayırmashılıǵı, silteme boyınsha shaqırıw parametrleri funkciya anıqlamasında da, shaqırıw ornında da belgileniwi kerek hám baǵdarlamashı ref hám out arasında tańlay aladı, sońǵısı qaytarıwda anıq mániske iye bolatuǵın inicializaciyalanbaǵan ózgeriwshini beriwge imkaniyat beredi[35]. Sonıń menen birge, baǵdarlamashı sońǵı parametrge params gilt sózin qollanıw arqalı ózgeriwshi ólshemli argumentler dizimin kórsete aladı[36]. Tek maydannıń mánisin qaytarıw yamasa oǵan mánis beriw arqalı alatuǵın yamasa ornatatuǵın ayırım arnawlı túrdegi metodlar anıq kórsetilgen tolıq qoltańbanı talap etpeydi, biraq ulıwma jaǵdayda, klasstıń anıqlaması onıń metodlarınıń tolıq qoltańba járiyalanıwın óz ishine aladı[37].
C++ sıyaqlı hám Javadan ayırmashılıǵı, C# baǵdarlamashıları metodlardıń kishi klasslar tárepinen qayta anıqlanıwına imkaniyat beriw ushın virtual gilt sózin paydalanıwı kerek. C++ ten ayırmashılıǵı, baǵdarlamashı bunı islegende override gilt sózin anıq kórsetiwi kerek[38]. Bul qayta anıqlaw menen funkciyanı jańadan artıqsha júklew (yaǵnıy, aldınǵı implementaciyanı jasırıw) arasındaǵı aljasıwdıń aldın alıwǵa arnalǵan. Sońǵısın islew ushın baǵdarlamashı new gilt sózin kórsetiwi kerek[39]. sealed gilt sózi jeke metodlar yamasa pútkil klasslar ushın bunnan bılay qayta anıqlawlarǵa jol qoymaw ushın qollanıla aladı[40].
C# taǵı keńeytpe metodları baǵdarlamashılarǵa statikalıq metodlardı klasstıń metod kestesiniń metodları sıyaqlı paydalanıwǵa imkaniyat beredi, bul baǵdarlamashılarǵa ózleri sol túrdegi obyektlerde (hám sáykes tuwındı klasslardıń úlgilerinde) bolıwı kerek dep esaplaǵan úlgi metodların virtual túrde qosıwǵa múmkinshilik beredi.
dynamic tipi orınlanıw waqtında metod baylanıstırıwǵa imkaniyat beredi, bul JavaScriptke uqsas metod shaqırıwlarına hám orınlanıw waqtında obyekt kompoziciyasına múmkinshilik beredi.
C# delegate gilt sózi arqalı qatań tiplestirilgen funkciya kórsetkishlerin qollap-quwatlaydı. Qt freymvorkınıń psevdo-C++ signal hám slotı sıyaqlı, C# ta arnawlı túrde járiyalaw-jazılıw stilindegi waqıyalar átirapında semantika bar, degen menen C# bunı islew ushın delegatlardı paydalanadı. Maydanlardan ayırmashılıǵı, event ózgeriwshileri interfeystiń bir bólegi bola aladı, sebebi olar texnikalıq jaqtan shaqırılıwı kerek bolǵan delegatlardı qosıw hám alıp taslaw ushın eki ádepki funkciyadan ibarat.
C# [MethodImpl(MethodImplOptions.Synchronized)] atributı arqalı Javaǵa uqsas synchronized metod shaqırıwların usınadı hám lock gilt sózi arqalı óz-ara sheklewli qulıplardı qollap-quwatlaydı.
Qásiyetler
C# qásiyetleri bar klasslardı qollap-quwatlaydı. Qásiyetler tiykarǵı maydanı bar ápiwayı kiriw funkciyaları bolıwı yamasa qálegen alıwshı hám ornatıwshı funkciyalardı ámelge asıra aladı. Eger ornatıwshı bolmasa, qásiyet tek oqıw ushın boladı. Maydanlar sıyaqlı, klass hám úlgi qásiyetleri bolıwı múmkin. Tiykarǵı metodlar basqa hár qanday metod sıyaqlı virtual yamasa abstract bolıwı múmkin.
C# 3.0 den baslap, avtomat ámelge asırılǵan qásiyetlerdiń sintaksislik qolaylıǵı bar,[41] onda kiriwshi (alıwshı) hám ózgertiwshi (ornatıwshı) klasstıń bir maydanındaǵı operaciyalardı inkapsulyaciyalaydı.
Atlar keńislikleri
C# atlar keńisligi Java paketine yamasa C++ atlar keńisligine (namespace) uqsas kod izolaciyası dárejesin usınadı, qaǵıydaları hám ózgeshelikleri package ge júdá uqsas. Atlar keńislikleri «using» sintaksisi menen import etiliwi múmkin[42].
Yadqa kiriw
C# tilinde yad adresi kórsetkishleri tek arnawlı túrde qáwipsiz emes dep belgilengen bloklar ishinde ǵana qollanıla aladı, hám qáwipsiz emes kodı bar programmalar orınlanıwı ushın sáykes ruqsatlardı talap etedi. Kópshilik obyektke kiriw qáwipsiz obyekt siltemeleri arqalı ámelge asırıladı, olar bárqulla ya «tiri» obyektke kórsetedi yamasa jaqsı anıqlanǵan null mánisine iye boladı; «óli» obyektke (qoqım jıynalǵan) yamasa qálegen yad blogına silteme alıw múmkin emes. Qáwipsiz emes kórsetkish klass úlgileri, massivler yamasa qatarlar sıyaqlı qoqım jıynawǵa jatatuǵın obyektlerge hesh qanday siltemesi joq basqarılmaytuǵın mánis tipiniń bir úlgisine kórsete aladı. Qáwipsiz emes dep belgilenbegen kod ele de System.IntPtr tipi arqalı kórsetkishlerdi saqlay aladı hám manipulyaciyalay aladı, biraq olardı dereferenciyalay almaydı.
Basqarılatuǵın yad anıq bosatılmaydı; onıń ornına, ol avtomat túrde qoqım jıynaladı. Qoqım jıynaw baǵdarlamashını kóp jaǵdaylarda endi kerek emes yadtı bosatıw juwapkershiliginen azat etiw arqalı yad aǵıwları máselesin sheshedi. Obyektlerge sіltemelerdi kereginen uzaǵıraq saqlaytuǵın kod ele de kereginen kóbirek yad qollanıwın bastan keshiriwi múmkin, biraq obyektke aqırǵı sіlteme azat etilgennen keyin yad qoqım jıynaw ushın qoljetimli boladı.
Ayrıqsha jaǵdaylar
Baǵdarlamashılarǵa standart ayrıqsha jaǵdaylardıń bir qatarı qoljetimli. Standart kitapxanalardaǵı metodlar geypara jaǵdaylarda úziliksiz túrde sistema ayrıqsha jaǵdayların ılaqtıradı hám ılaqtıratuǵın ayrıqsha jaǵdaylar diapazonı ádette hújjetlestirilgen. Arnawlı ayrıqsha jaǵday klassları klasslar ushın anıqlanıwı múmkin, bul kerek bolǵanda ayrıqsha jaǵdaylar ushın qayta islewdi ornatıwǵa imkaniyat beredi[43].
Ayrıqsha jaǵdaylardı qayta islew sintaksisi tómendegishe:
try
{
// bir nárse
}
catch (Exception ex)
{
// eger qáte bolsa bunı isle
}
finally
{
// qáte júz beriwine qaramastan bárqulla orınlanadı
}
Kópshilik adamlar bunı «try-catch» kod blogı dep ataydı, sebebi «try» hám «catch» funkciyaları barlıq C# versiyalarında qollanıladı hám qoljetimli.
try
{
// bul jerde bir nárse
}
catch (Exception ex)
{
// mısal
return 0;
}
finally
{
return 1;
}
Jobalarıńızǵa baylanıslı, «finally» bólegin qaldırıp ketiwge boladı. Eger qáte detalların tekseriw talap etilmese, (Exception ex) parametri de túsirip qaldırılıwı múmkin. Sonday-aq, hár túrli ayrıqsha jaǵdaylardı qayta isleytuǵın bir neshe «catch» bólimleri bolıwı múmkin[44].
Tekserilgen ayrıqsha jaǵdaylar C# ta joq (Javadan ayırmashılıǵı). Bul masshtablanıw hám versiyanı basqarıw máselelerine tiykarlanǵan sanalı sheshim bolǵan[45].
Polimorfizm
C++ ten ayırmashılıǵı, C# kóp miyrasxorlıqtı qollap-quwatlamaydı, degen menen bir klass qálegen sanlı «interfeyslerdi» (tolıq abstrakt klasslar) ámelge asıra aladı. Bul tildiń bas arxitektorı tárepinen quramalılıqlardıń aldın alıw hám pútkil CLI boyınsha arxitekturalıq talaplardı ápiwayılastırıw ushın qabıl etilgen dizayn sheshimi boldı.
Birdey atqa iye hám birdey tártipte birdey tipli parametrlerdi alatuǵın metodtı (yaǵnıy, birdey qoltańba) óz ishine alǵan bir neshe interfeyslerdi ámelge asırǵanda, Javaǵa uqsas, C# barlıq interfeyslerdi qamtıytuǵın bir metodqa da, eger zárúr bolsa, hárbir interfeys ushın arnawlı metodlarǵa da imkaniyat beredi.
C# sonıń menen birge funkciyanı artıqsha júklewdi (ad-hoc-polimorfizm dep te ataladı), yaǵnıy birdey atqa iye, biraq ajıratılatuǵın qoltańbaları bar metodlardı da qollap-quwatlaydı[46]. Javadan ayırmashılıǵı, C# qosımsha túrde operatorlardı artıqsha júklewdi de qollap-quwatlaydı[47].
2.0 versiyasınan baslap, C# parametrlik polimorfizmdi usınadı, yaǵnıy qálegen yamasa sheklengen tipli parametrleri bar klasslar, mısalı, List<T>, tek T tipindegi elementlerdi ǵana óz ishine ala alatuǵın ózgeriwshi ólshemli massiv. Baǵdarlamashı tip parametrleri ushın belgili bir túrdegi sheklewlerdi kórsete aladı: X tipi (yamasa onnan tuwındı) bolıwı kerek, belgili bir interfeysti ámelge asırıwı kerek, silteme tipi bolıwı kerek, mánis tipi bolıwı kerek, ashıq parametrsiz konstruktordı ámelge asırıwı kerek. Olardıń kópshiligi biriktirile aladı hám qálegen sanlı interfeys kórsetile aladı[48][49].
Tilge integraciyalanǵan soraw (LINQ)
C# .NET Framework arqalı LINQ ti paydalanıw imkaniyatına iye. Baǵdarlamashı, eger obyektte IEnumerable<T> interfeysi ámelge asırılǵan bolsa, hár túrli maǵlıwmat dereklerinen soraw jibere aladı. Bul XML hújjetlerin, ADO.NET maǵlıwmatlar toplamın hám SQL maǵlıwmatlar bazaların óz ishine aladı[50].
C# ta LINQ ti paydalanıw IntelliSense qollap-quwatlawı, kúshli filtrlew imkaniyatları, kompilyaciya qátelerin tekseriw imkaniyatı bar tip qáwipsizligi hám hár túrli derekler boyınsha maǵlıwmatlardı soraw ushın izbe-izlik sıyaqlı artıqmashılıqlar beredi[51]. C# hám LINQ penen paydalanıwǵa bolatuǵın bir neshe hár túrli til strukturaları bar hám olar soraw ańlatpaları, lyambda ańlatpaları, anonim tipler, jasırın tiplestirilgen ózgeriwshiler, keńeytpe metodları hám obyekt inicializatorları bolıp tabıladı[52].
LINQ tiń eki sintaksisi bar: soraw sintaksisi hám metod sintaksisi. Degen menen, kompilyator bárqulla soraw sintaksisin kompilyaciya waqtında metod sintaksisine aylandıradı[53].
using System.Linq;
var numbers = new int[] { 5, 10, 8, 3, 6, 12 };
// Soraw sintaksisi (SELECT num FROM numbers WHERE num % 2 = 0 ORDER BY num)
var numQuery1 =
from num in numbers
where num % 2 == 0
orderby num
select num;
// Metod sintaksisi
var numQuery2 =
numbers
.Where(num => num % 2 == 0)
.OrderBy(n => n);
Funkcional programmalastırıw
Tiykarınan imperativ til bolsa da, C# waqıt ótiwi menen bárqulla funkcional ózgeshelikler qosıp kelmekte,[54][55] mısalı:
- Birinshi dárejeli puqaralıq retindegi funkciyalar – C# 1.0 delegatları[56]
- Joqarı dárejeli funkciyalar – C# 1.0 delegatlar menen birge
- Anonim funkciyalar – C# 2 anonim delegatları hám C# 3 lyambda ańlatpaları[57]
- Jabılıwlar – C# 2 anonim delegatlar menen birge hám C# 3 lyambda ańlatpaları menen birge
- Tip shıǵarıw – C# 3 te jasırın tiplestirilgen lokal ózgeriwshiler var hám C# 9 maqsetke tiykarlanǵan jańa ańlatpalar new()
- Dizimdi túsiniw – C# 3 LINQ
- Kortejler – .NET Framework 4.0 biraq C# 7.0 til qollap-quwatlawı menen jańa kortej tipin kirgizgende keń tarqaldı
- Ishki funkciyalar – C# 7.0
- Úlgi sáykesligi – C# 7.0[58]
- Ózgermeytuǵınlıq – C# 7.2 readonly struct C# 9 jazıw tipleri[59] hám Tek inicializaciyalanatuǵın ornatıwshılar[60]
- Tip klassları – C# 12 rolleri/keńeytpeleri (rawajlanıwda[61])
Ulıwma tip sisteması
C# birlesken tip sistemasına iye. Bul birlesken tip sisteması Ulıwma Tip Sisteması (CTS) dep ataladı.
Birlesken tip sisteması barlıq tiplerdiń, sonıń ishinde pútin sanlar sıyaqlı primitivlerdiń de, System.Object klasınıń kishi klassları ekenin bildiredi. Mısalı, hárbir tip ToString() metodın miyras etip aladı.
Maǵlıwmat tipleriniń kategoriyaları
CTS maǵlıwmat tiplerin eki kategoriyaǵa bóledi:
- Silteme tipleri
- Mánis tipleri
Mánis tipleriniń úlgileri silteme sáykesligine de, silteme salıstırıw semantikasına da iye emes. Mánis tipleri ushın teńlik hám teńsizlik salıstırıwları, eger sáykes operatorlar qayta júklenbese, úlgiler ishindegi haqıyqıy maǵlıwmat mánislerin salıstıradı. Mánis tipleri System.ValueType-tan alınadı, bárqulla ádepki mániske iye hám bárqulla jaratılıwı hám kóshiriliwi múmkin. Mánis tiplerine baylanıslı basqa da ayırım sheklewler — olar bir-birinen kelip shıǵa almaydı (biraq interfeyslerdi ámelge asıra aladı) hám anıq ádepki (parametrsiz) konstruktorǵa iye bola almaydı, sebebi olar barlıq qamtılǵan maǵlıwmatlardı tipke ǵárezli ádepki mániske (0, null yamasa usıǵan uqsas) inicializaciyalaytuǵın jasırın birine iye. Mánis tipleriniń mısalları — int (belgili 32-bitlik pútin san), float (32-bitlik IEEE haqıyqıy san), char (16-bitlik Unicode kod birligi), decimal (valyuta muǵdarların qollaw ushın paydalı turaqlı noqatlı sanlar) hám System.DateTime (nanosekund dálligi menen anıq bir waqıt noqatın bildiredi) sıyaqlı barlıq primitiv tipler. Basqa mısallar — enum (sanawlar) hám struct (paydalanıwshı anıqlaǵan strukturalar).
Usıǵan qarama-qarsı, silteme tipleri silteme sáykesligi túsinigine iye, bul silteme tipiniń hárbir úlgisiniń, hátte eki úlgidegi maǵlıwmatlar birdey bolsa da, basqa hár bir úlgiden tiykarınan ayırmashılıq etetuǵının bildiredi. Bul silteme tipleri ushın ádepki teńlik hám teńsizlik salıstırıwlarında sáwlelengen, olar strukturalıq emes, al silteme teńligin tekseredi, eger sáykes operatorlar artıqsha júklenbese (System.String jaǵdayındaǵı sıyaqlı). Geypara operaciyalar bárqulla múmkin emes, mısalı, silteme tipiniń bir úlgisin jaratıw, bar úlgini kóshiriw yamasa eki bar úlgi arasında mánis salıstırıwın orınlaw. Soǵan qaramastan, belgili bir silteme tipleri ashıq konstruktordı kórsetiw yamasa sáykes interfeysti ámelge asırıw arqalı bunday xızmetlerdi usına aladı (ICloneable yamasa IComparable sıyaqlı). Silteme tipleriniń mısalları — object (basqa barlıq C# klassları ushın tiykarǵı bazalıq klass), System.String (Unicode simvolları qatarı) hám System.Array (barlıq C# massivleri ushın bazalıq klass).
Eki tip kategoriyası da paydalanıwshı anıqlaǵan tipler menen keńeytile aladı.
Qutıǵa salıw hám qutıdan shıǵarıw
Qutıǵa salıw — bul mánis-tipindegi obyektti sáykes silteme tipindegi mániske aylandırıw operaciyası. C# ta qutıǵa salıw jasırın.
Qutıdan shıǵarıw — bul silteme tipindegi mánisti (aldın qutıǵa salınǵan) mánis tipindegi mániske aylandırıw operaciyası. C# ta qutıdan shıǵarıw anıq tip túrlendiriwin talap etedi. T tipindegi qutıǵa salınǵan obyekt tek T-ǵa (yamasa nullable T-ǵa) ǵana qutıdan shıǵarıla aladı[62].
Mısal:
int foo = 42; // Mánis tip.
object bar = foo; // foo bar-ǵa qutıǵa salınadı.
int foo2 = (int)bar; // Mánis tipine qayta qutıdan shıǵarıladı.
Kitapxanalar
C# specifikaciyası kompilyatordıń qoljetimli bolıwın kútiwshi tiplerdiń hám klass kitapxanalarınıń minimal toplamın tolıq kórsetedi. Ámeliyatta, C# kóbinese ECMA-335 Common Language Infrastructure (CLI) retinde standartlastırılǵan Common Language Infrastructure (CLI) implementaciyasınıń geypara túri menen qollanıladı.
Standart CLI specifikaciyalarınan tısqarı, qosımsha funkcional imkaniyatlardı usınıw ushın .NET freymvork kitapxanalarınıń ústine qurılǵan kóp kommerciyalıq hám jámiyetlik klass kitapxanaları bar[63].
C# .NET kitapxanaları hám freymvorkları dizimine kirgizilgen hár qanday kitapxanaǵa shaqırıwlar isley aladı.
Mısallar
Hello World
Tómendegi júdá ápiwayı bir C# programması, C# 9-da kirgizilgen joqarı dárejeli operatorlar ózgesheligin paydalanatuǵın klassikalıq «Hello World» mısalınıń bir versiyası[64].
System.Console.WriteLine("Hello, World!");
C# 8 yamasa onnan tómenirek versiyada jazılǵan kod ushın, programmanıń kirisiw noqatı logikası tip ishindegi Main metodında jazılıwı kerek:
using System;
class Program
{
static void Main()
{
Console.WriteLine("Hello, World!");
}
}
Bul kod konsol aynasında tómendegi tekstti kórsetedi:
Hello, World!
Hárbir qatardıń bir maqseti bar:
using System;
Joqarıdaǵı qatar System atlar keńisligindegi barlıq tiplerdi import etedi. Mısalı, derek kodında keyinirek qollanılatuǵın Console klassı System atlar keńisliginde anıqlanǵan, bul onı tiptiń tolıq atın (ol atlar keńisligin óz ishine aladı) kórsetpey paydalanıwǵa bolatuǵının bildiredi.
// Klassikalıq «Hello World» programmasınıń versiyası
Bul qatar — kommentariya; ol kodtı baǵdarlamashı(lar) ushın súwretleydi hám hújjetlestiredi.
class Program
Joqarıda Program klassı ushın klass anıqlaması berilgen. Figuralı qawsırmalar arasındaǵı hámmesi sol klasstı súwretleydi.
{
...
}
Figuralı qawsırmalar kod blogınıń shegaraların belgileydi. Bul birinshi jaǵdayda, olar Program klasınıń baslanıwın hám juwmaqlanıwın belgilemekte.
static void Main()
Bul programmanıń orınlanıwın baslaytuǵın klass aǵzası metodın járiyalaydı. .NET orınlanıw ortalıǵı Main metodın shaqıradı. Javadan ayırmashılıǵı, Main metodına public gilt sózi kerek emes, ol kompilyatorǵa metodtı hár qanday jerden hár qanday klass shaqıra alatuǵının bildiredi. static void Main(string[] args) dep jazıw private static void Main(string[] args) dep jazıwǵa ekvivalent[65]. static gilt sózi metodqa Program úlgisisiz kiriwge múmkinshilik beredi. Hárbir konsol qosımshasınıń Main kirisiw noqatı static dep járiyalanıwı kerek, basqa jaǵdayda programma Program úlgisin talap etetuǵın edi, biraq hár qanday úlgi programmanı talap etken. Bul sheshilmeytuǵın aylanbalı ǵárezliliktiń aldın alıw ushın, konsol qosımshaların qayta isleytuǵın C# kompilyatorları (joqarıdaǵı sıyaqlı) eger static Main metodı bolmasa, qáte haqqında xabar beredi. void gilt sózi Main-niń qaytarılatuǵın mánisi joq ekenin járiyalaydı. (Degen menen, itibar beriń, qısqa programmalar aldın aytıp ótilgenindey, C# 9-da kirgizilgen Joqarı Dárejeli Operatorlar qollanılıp jazılıwı múmkin.)
Console.WriteLine("Hello, World!");
Bul qatar shıǵarıwdı jazadı. Console — bul System atlar keńisligindegi statikalıq klass. Ol konsol qosımshaları ushın standart kirgiziw/shıǵarıw hám qáte aǵımlarına interfeys usınadı. Programma konsolda «Hello, World!» qatarı argumenti menen bir qatardı kórsetetuǵın Console metodı WriteLine-dı shaqıradı.
Generikler
.NET 2.0 hám C# 2.0 menen birge, ashıq .NET 1.x tegisinen de qolaylıraq kollekciyalarǵa iye boldı. Generikler bolmaǵanda, baǵdarlamashılar anıqlanbaǵan túrdegi obyektler retinde elementlerdi saqlaw ushın ArrayList sıyaqlı kollekciyalardı paydalanıwı kerek edi, bul qamtılǵan elementlerdi qutıǵa salıw/qutıdan shıǵarıw/tip tekseriw waqtında ónimlilik shıǵınlarına alıp keletuǵın edi.
Generikler .NET-te baǵdarlamashılarǵa tip jaǵınan qáwipsiz maǵlıwmatlar strukturaların jaratıwǵa imkaniyat beretuǵın úlken jańa ózgeshelik kirgizdi. Bul ózgeris ásirese eskirgen maǵlıwmatlar strukturaların nátiyjelirek, tip jaǵınan qáwipsiz alternativalar menen almastırıw arqalı ónimlilikti hám qollap-quwatlawdı ádewir jaqsılaytuǵın eski sistemalardı túrlendiriw kontekstinde áhmiyetli[66].
Mısal
public class DataStore<T>
{
private T[] items = new T[10];
private int count = 0;
public void Add(T item)
{
items[count++] = item;
}
public T Get(int index)
{
return items[index];
}
}
Standartlastırıw hám licenziyalaw
2001-jıl avgust ayında Microsoft, Hewlett-Packard hám Intel C# ushın, sonday-aq Common Language Infrastructure (CLI) ushın specifikaciyalardı standartlar shólkemi Ecma International-ǵa birgelikte usındı. 2001-jıl dekabr ayında ECMA ECMA-334 C# Til Specifikaciyasın járiyaladı. C# 2003-jılı ISO/IEC standartına aylandı (ISO/IEC 23270:2003 - Informaciyalıq texnologiyalar — Programmalastırıw tilleri — C#). ECMA aldınnan 2002-jıl dekabr ayında C# tıń 2-basılımı retinde ekvivalent specifikaciyalardı qabıl etken edi. 2005-jıl iyun ayında ECMA C# specifikaciyasınıń 3-basılımın tastıyıqladı hám ECMA-334-ti jańaladı. Qosımshalarǵa tolıq emes klasslar, anonim metodlar, null bolıwı múmkin tipler hám generikler (C++ shablonlarına biraz uqsas) kiredi. 2005-jıl iyul ayında ECMA standartlardı hám baylanıslı TR-lardı sońǵısınıń Tez Jol procesi arqalı ISO/IEC JTC 1/SC 22-ge jiberdi. Bul process ádette 6–9 ay dawam etedi.
C# tiliniń anıqlaması hám CLI patent talaplarına aqılǵa muwapıq hám diskriminaciyasız licenziyalaw qorǵawın támiyinleytuǵın ISO/IEC hám Ecma standartları boyınsha standartlastırılǵan.
Microsoft dáslep ashıq kodlı baǵdarlamashılardı Ashıq Specifikaciya Wádesi menen qamtılǵan freymvork bólimi ushın kommerciyalıq emes joybarlarda patentlerdi buzǵanı ushın sudqa bermewge kelisti[67]. Microsoft sonday-aq Novell ónimlerine baylanıslı patentlerdi Novell-diń tólewshi klientlerine qarsı qollanbawǵa kelisti, tek C#, .NET yamasa Novell-diń .NET implementaciyasın (Mono Joybarı) anıq atap ótpeytuǵın ónimler dizimi bunnan tısqarı[68][69]. Degen menen, Novell Mono-nıń hesh qanday Microsoft patentlerin buzbaytuǵının aytıp keldi[70]. Microsoft sonday-aq Mono-ǵa baylanıslı bolǵan Moonlight brauzer plagini menen baylanıslı patent huqıqların, eger ol Novell arqalı alınsa, qollanbawǵa arnawlı anıq kelisim dúzdi[71].
On jıldan keyin, Microsoft C# ushın biypul, ashıq kodlı hám kross-platformalı qurallardı, atap aytqanda Visual Studio Code, .NET Core hám Roslyn-di islep shıǵara basladı. Mono Microsoftqa Microsofttıń sıńar kompaniyası Xamarin niń bir joybarı retinde qosıldı.
Implementaciyalar
Microsoft ashıq kodlı anıqlama C# kompilyatorların hám quralların islep shıqtı. Birinshi kompilyator Roslyn aralıq tilge (IL) kompilyaciya etedi, al ekinshisi RyuJIT[72] — bul dinamikalıq hám jedel optimallastırıw isleytuǵın hám IL-di oraylıq processorlardıń aldıńǵı bólimi ushın jergilikli kodqa kompilyaciya etetuǵın JIT (dál waqtında) kompilyatorı[73]. RyuJIT ashıq kodlı hám C++ te jazılǵan[74]. Roslyn tolıǵı menen basqarılatuǵın kodta (C#) jazılǵan, ashıq hám funkcional imkaniyatları API retinde usınılǵan. Solay etip, ol baǵdarlamashılarǵa refaktoring hám diagnostika quralların jaratıwǵa imkaniyat beredi[75]. Rásmiy implementaciyanıń eki tarmaǵı bar: .NET Framework (jabıq kodlı, tek Windows ushın) hám .NET Core (ashıq kodlı, kross-platformalı); olar aqırında bir ashıq kodlı implementaciyaǵa birikti: .NET 5.0[76]. .NET Framework 4.6-da jańa JIT kompilyatorı burınǵısın almastırdı[77].
Basqa C# kompilyatorları (olardıń geyparaları Common Language Infrastructure hám .NET klass kitapxanalarınıń implementaciyasın óz ishine aladı):
- Mono, Microsoft qáwenderligindegi joybar, ashıq kodlı C# kompilyatorın, CLI-diń tolıq ashıq kodlı implementaciyasın (ECMA specifikaciyasında kórsetilgenindey zárúr freymvork kitapxanaların qosqanda) hám .NET Framework 3.5-ke shekemgi NET klass kitapxanalarınıń derlik tolıq implementaciyasın usınadı.
- RemObjects-tiń Elements qural toplamı RemObjects C#-tı óz ishine aladı, ol C# kodın .NET-tiń Common Intermediate Language-ine, Java bayt-kodına, Cocoa-ǵa, Android bayt-kodına, WebAssembly-ge hám Windows, macOS hám Linux ushın jergilikli mashina kodına kompilyaciya etedi.
- DotGNU joybarı (házir toqtatılǵan) sonday-aq ashıq kodlı C# kompilyatorın, ECMA specifikaciyasında kórsetilgenindey zárúr freymvork kitapxanaların óz ishine alǵan Common Language Infrastructure-niń derlik tolıq implementaciyasın hám .NET 2.0-ge shekem qalǵan geypara Microsoft menshikli .NET klass kitapxanalarınıń bir bólimin usındı (olar ECMA specifikaciyasında hújjetlestirilmegen yamasa kirgizilmegen, biraq Microsofttıń standart .NET Framework distribuciyasında bar).
Unity oyın dvijogı C# tı óziniń tiykarǵı skriptlew tili retinde qollanadı. Godot oyın dvijogı Microsofttan alınǵan 24 000 dollar qayırqomlıq sebepli qosımsha C# modulin ámelge asırdı[78].
Derekler
- ↑ Wagner. «What's new in C# 14» (en-us). learn.microsoft.com. Qaraldı: 13-sentyabr 2025-jıl.
- ↑ Dollard. «Announcing C# 12» (en-US). .NET Blog (14-noyabr 2023-jıl). 18-noyabr 2023-jılda túp nusqadan arxivlendi. Qaraldı: 18-noyabr 2023-jıl.
- ↑ Seth. «Announcing .NET 8» (en-US). .NET Blog (14-noyabr 2023-jıl). 19-noyabr 2023-jılda túp nusqadan arxivlendi. Qaraldı: 18-noyabr 2023-jıl.
- ↑ {{{title}}}.
- ↑ «Design Goals of C#». www.java-samples.com. 6-oktyabr 2021-jılda túp nusqadan arxivlendi. Qaraldı: 6-oktyabr 2021-jıl.
- ↑ Zander. «Couple of Historical Facts» (21-noyabr 2007-jıl). 29-iyul 2020-jılda túp nusqadan arxivlendi. Qaraldı: 9-sentyabr 2025-jıl.
- ↑ Guthrie. «What language was ASP.Net originally written in?» (28-noyabr 2006-jıl). 24-iyun 2016-jılda túp nusqadan arxivlendi. Qaraldı: 21-fevral 2008-jıl.
- ↑ Hamilton (2008-10-01). „The A-Z of Programming Languages: C#“. Computerworld. 2019-05-18da túp nusqadan arxivlendi. Qaraldı: 2025-09-09.
- ↑ «Details». nilsnaegele.com. 7-aprel 2019-jılda túp nusqadan arxivlendi. Qaraldı: 7-aprel 2019-jıl.
- ↑ «Why Microsoft's C# isn't». CNET: CBS Interactive (2002). 14-avgust 2023-jılda túp nusqadan arxivlendi. Qaraldı: 18-sentyabr 2023-jıl.
- ↑ Joy. «Microsoft's blind spot». cnet.com (7-fevral 2002-jıl). 14-avgust 2023-jılda túp nusqadan arxivlendi. Qaraldı: 18-sentyabr 2023-jıl.
- ↑ "Deep Inside C#: An Interview with Microsoft Chief Architect Anders Hejlsberg". O'Reilly Media. 2000-08-01. http://windowsdevcenter.com/pub/a/oreilly/windows/news/hejlsberg_0800.html.
- ↑ «Generics (C# Programming Guide)». Microsoft. 26-avgust 2011-jılda túp nusqadan arxivlendi. Qaraldı: 21-mart 2011-jıl.
- ↑ Don Box and Anders Hejlsberg. «LINQ: .NET Language-Integrated Query». Microsoft (fevral 2007). 24-avgust 2011-jılda túp nusqadan arxivlendi. Qaraldı: 21-mart 2011-jıl.
- ↑ Mercer. «Why functional programming and LINQ is often better than procedural code». abodit.com (15-aprel 2010-jıl). 11-iyul 2011-jılda túp nusqadan arxivlendi. Qaraldı: 21-mart 2011-jıl.
- ↑ Fernandez. «Andy Retires». Dan Fernandez's Blog. Blogs.msdn.com (29-yanvar 2004-jıl). 19-yanvar 2012-jılda túp nusqadan arxivlendi. Qaraldı: 4-oktyabr 2012-jıl.
- ↑ «Technical committees - JTC 1/SC 22 - Programming languages, their environments and system software interfaces». ISO. 27-sentyabr 2012-jılda túp nusqadan arxivlendi. Qaraldı: 4-oktyabr 2012-jıl.
- ↑ «ISO/IEC 23270:2003 - Information technology - C# Language Specification». Iso.org (23-avgust 2006-jıl). 8-may 2012-jılda túp nusqadan arxivlendi. Qaraldı: 4-oktyabr 2012-jıl.
- ↑ «ISO/IEC 23270:2006 - Information technology - Programming languages - C#». Iso.org (26-yanvar 2012-jıl). 6-dekabr 2010-jılda túp nusqadan arxivlendi. Qaraldı: 4-oktyabr 2012-jıl.
- ↑ «SO/IEC 23270:2018 Information technology — Programming languages — C#» (en). ISO. Qaraldı: 26-noyabr 2020-jıl.
- ↑ Mariani. «My History of Visual Studio (Part 1) – Rico Mariani's Performance Tidbits». Rico Mariani's Performance Tidbits (5-oktyabr 2009-jıl). 27-may 2018-jılda túp nusqadan arxivlendi. Qaraldı: 26-may 2018-jıl.
- ↑ Kovacs. «C#/.NET History Lesson» (7-sentyabr 2007-jıl). 6-mart 2009-jılda túp nusqadan arxivlendi. Qaraldı: 18-iyun 2009-jıl.
- ↑ Hejlsberg, Anders (October 1, 2008). „The A-Z of Programming Languages: C#“. Computerworld. April 2, 2015da túp nusqadan arxivlendi. Qaraldı: June 22, 2014.
- ↑ «F# FAQ». Microsoft Research. 18-fevral 2009-jılda túp nusqadan arxivlendi. Qaraldı: 18-iyun 2009-jıl.
- ↑ Simon. «Full Eiffel on the .NET Framework». Microsoft (iyun 2002). 21-iyul 2009-jılda túp nusqadan arxivlendi. Qaraldı: 18-iyun 2009-jıl.
- ↑ stevewhims. «Compiling Apps with .NET Native - UWP applications» (en-us). learn.microsoft.com (20-oktyabr 2022-jıl). 27-oktyabr 2023-jılda túp nusqadan arxivlendi. Qaraldı: 27-oktyabr 2023-jıl.
- ↑ LakshanF. «Native AOT deployment overview - .NET» (en-us). learn.microsoft.com (12-sentyabr 2023-jıl). 11-noyabr 2023-jılda túp nusqadan arxivlendi. Qaraldı: 27-oktyabr 2023-jıl.
- ↑ «Types/General, part of the official C# documentation». Microsoft. 29-mart 2024-jılda túp nusqadan arxivlendi. Qaraldı: 6-aprel 2024-jıl.
- ↑ BillWagner. «Expression Trees (C#)» (en-us). Microsoft Learn. 15-may 2021-jılda túp nusqadan arxivlendi. Qaraldı: 14-may 2021-jıl.
- ↑ «Attribute Class».
- ↑ dotnet-bot. «System.Reflection.Emit Namespace» (en-us). learn.microsoft.com. 28-aprel 2023-jılda túp nusqadan arxivlendi. Qaraldı: 28-aprel 2023-jıl.
- ↑ McAllister. «Microsoft's Roslyn: Reinventing the compiler as we know it» (en). InfoWorld (20-oktyabr 2011-jıl). 5-mart 2022-jılda túp nusqadan arxivlendi. Qaraldı: 5-mart 2022-jıl.
- ↑ «Introducing C# Source Generators» (en-US). .NET Blog (29-aprel 2020-jıl). 7-may 2021-jılda túp nusqadan arxivlendi. Qaraldı: 14-may 2021-jıl.
- ↑ «Classes/fields, part of the official C# documentation» (7-fevral 2024-jıl).
- ↑ «out (C# Reference)» (30-mart 2024-jıl).
- ↑ «Method parameters/params modifier, part of the official C# documentation» (21-may 2024-jıl).
- ↑ «Classes/properties, part of the official C# documentation» (7-fevral 2024-jıl).
- ↑ «virtual (C# Reference)» (en-us). Microsoft Learn (15-sentyabr 2021-jıl). 30-avgust 2018-jılda túp nusqadan arxivlendi. Qaraldı: 4-aprel 2018-jıl.
- ↑ «new modifier, part of the official C# documentation» (12-aprel 2023-jıl).
- ↑ «Abstract and Sealed Classes and Class Members - C#» (27-oktyabr 2021-jıl).
- ↑ «Auto-Implemented Properties (C# Programming Guide)». 29-oktyabr 2020-jılda túp nusqadan arxivlendi. Qaraldı: 12-sentyabr 2020-jıl.
- ↑ «using directive - C# Reference» (en-us). Microsoft Docs. 14-aprel 2019-jılda túp nusqadan arxivlendi. Qaraldı: 14-aprel 2019-jıl.
- ↑ «How to create user-defined exceptions». 26-yanvar 2021-jılda túp nusqadan arxivlendi. Qaraldı: 12-sentyabr 2020-jıl.
- ↑ «Exception-handling statements, part of the official C# documentation». Microsoft Learn (22-aprel 2023-jıl). Qaraldı: 26-iyun 2024-jıl.
- ↑ Venners. «The Trouble with Checked Exceptions» (18-avgust 2003-jıl). 18-fevral 2015-jılda túp nusqadan arxivlendi. Qaraldı: 30-mart 2010-jıl.
- ↑ «Expressions/Overload resolution, part of the official C# documentation». Microsoft Learn (7-fevral 2024-jıl). Qaraldı: 7-aprel 2024-jıl.
- ↑ BillWagner. «Operator overloading - C# reference» (en-us). Microsoft Learn. 24-iyun 2021-jılda túp nusqadan arxivlendi. Qaraldı: 20-iyun 2021-jıl.
- ↑ «Types/Constructed Types, part of the official C# documentation». Microsoft Learn. Qaraldı: 7-aprel 2024-jıl.
- ↑ «Classes/Type Parameter constraints, part of the official C# documentation». Microsoft Learn (7-fevral 2024-jıl). Qaraldı: 7-aprel 2024-jıl.
- ↑ Research of the Database Access Technology Under.NET Framework.
- ↑ Otey, Michael (February 2006). „LINQ to the Future“. SQL Server Magazine. 8-tom, № 2. 17–21-bet. Úlgi:ProQuest.
- ↑ Sheldon, William (November 2010). „New Features in LINQ“. SQL Server Magazine. 12-tom, № 11. 37–40-bet. Úlgi:ProQuest.
- ↑ BillWagner. «Query Syntax and Method Syntax in LINQ (C#)» (en-us). learn.microsoft.com (15-sentyabr 2021-jıl). 23-may 2023-jılda túp nusqadan arxivlendi. Qaraldı: 23-may 2023-jıl.
- ↑ erikdietrich. «The history of C# - C# Guide» (en-us). learn.microsoft.com (9-mart 2023-jıl). 28-aprel 2023-jılda túp nusqadan arxivlendi. Qaraldı: 28-aprel 2023-jıl.
- ↑ The functional journey of C# - Mads Torgersen - NDC Copenhagen 2022 (Англичанша), August 17, 2022, May 15, 2023da túp nusqadan arxivlendi, qaraldı: 2023-05-15
- ↑ «The Beauty of Closures». csharpindepth.com. 19-may 2023-jılda túp nusqadan arxivlendi. Qaraldı: 28-aprel 2023-jıl.
- ↑ BillWagner. «Anonymous functions - C# Programming Guide» (en-us). Microsoft Learn. 15-aprel 2021-jılda túp nusqadan arxivlendi. Qaraldı: 15-may 2021-jıl.
- ↑ «What's New in C# 7.0» (en-us). Microsoft Docs. 6-avgust 2020-jılda túp nusqadan arxivlendi. Qaraldı: 14-aprel 2019-jıl.
- ↑ «C# 9.0 on the record» (en-US). .NET Blog (10-noyabr 2020-jıl). 15-may 2021-jılda túp nusqadan arxivlendi. Qaraldı: 15-may 2021-jıl.
- ↑ BillWagner. «init keyword - C# Reference» (en-us). learn.microsoft.com (30-iyun 2022-jıl). 19-may 2023-jılda túp nusqadan arxivlendi. Qaraldı: 19-may 2023-jıl.
- ↑ The .NET Compiler Platform, 2023-04-28, April 28, 2023da túp nusqadan arxivlendi, qaraldı: 2023-04-28
{{citation}}: Unknown parameter|publisher=ignored (járdem) - ↑ Lippert. «Representation and Identity». Fabulous Adventures In Coding. Blogs.msdn.com (19-mart 2009-jıl). 12-iyul 2011-jılda túp nusqadan arxivlendi. Qaraldı: 4-oktyabr 2012-jıl.
- ↑ «Framework Libraries». Microsoft Learn (19-aprel 2023-jıl). 14-iyul 2019-jılda túp nusqadan arxivlendi. Qaraldı: 14-iyul 2019-jıl.
- ↑ BillWagner. «What's new in C# 9.0 - C# Guide» (en-us). Microsoft Learn. 5-sentyabr 2020-jılda túp nusqadan arxivlendi. Qaraldı: 14-may 2021-jıl.
- ↑ BillWagner. «Main() and command-line arguments» (en-us). Microsoft Learn. 5-avgust 2021-jılda túp nusqadan arxivlendi. Qaraldı: 5-avgust 2021-jıl.
- ↑ «Unlocking the Power of C# Generics: A Comprehensive Guide» (24-aprel 2024-jıl).
- ↑ «Patent Pledge for Open Source Developers» (16-mart 2023-jıl). 7-dekabr 2017-jılda túp nusqadan arxivlendi. Qaraldı: 28-oktyabr 2017-jıl.
- ↑ «Patent Cooperation Agreement - Microsoft & Novell Interoperability Collaboration». Microsoft (2-noyabr 2006-jıl). — „Microsoft, on behalf of itself and its Subsidiaries (collectively "Microsoft"), hereby covenants not to sue Novell's Customers and Novell's Subsidiaries' Customers for infringement under Covered Patents of Microsoft on account of such a Customer's use of specific copies of a Covered Product as distributed by Novell or its Subsidiaries (collectively "Novell") for which Novell has received Revenue (directly or indirectly) for such specific copies; provided the foregoing covenant is limited to use by such Customer (i) of such specific copies that are authorized by Novell in consideration for such Revenue, and (ii) within the scope authorized by Novell in consideration for such Revenue.“. 17-may 2009-jılda túp nusqadan arxivlendi. Qaraldı: 5-iyul 2009-jıl.
- ↑ «Definitions». Microsoft (2-noyabr 2006-jıl). 4-noyabr 2012-jılda túp nusqadan arxivlendi. Qaraldı: 5-iyul 2009-jıl.
- ↑ Steinman. «Novell Answers Questions from the Community» (7-noyabr 2006-jıl). — „We maintain that Mono does not infringe any Microsoft patents.“. 16-iyul 2013-jılda túp nusqadan arxivlendi. Qaraldı: 5-iyul 2009-jıl.
- ↑ «Covenant to Downstream Recipients of Moonlight - Microsoft & Novell Interoperability Collaboration». Microsoft (28-sentyabr 2007-jıl). — „"Downstream Recipient" means an entity or individual that uses for its intended purpose a Moonlight Implementation obtained directly from Novell or through an Intermediate Recipient... Microsoft reserves the right to update (including discontinue) the foregoing covenant... "Moonlight Implementation" means only those specific portions of Moonlight 1.0 or Moonlight 1.1 that run only as a plug-in to a browser on a Personal Computer and are not licensed under GPLv3 or a Similar License.“. 23-sentyabr 2010-jılda túp nusqadan arxivlendi. Qaraldı: 8-mart 2008-jıl.
- ↑ «The RyuJIT transition is complete!». microsoft.com (19-iyun 2018-jıl). 19-iyul 2019-jılda túp nusqadan arxivlendi. Qaraldı: 20-iyul 2021-jıl.
- ↑ «Managed Execution Process». microsoft.com. 23-dekabr 2017-jılda túp nusqadan arxivlendi. Qaraldı: 20-iyul 2021-jıl.
- ↑ «coreclr/src/jit/». github.com. 9-yanvar 2019-jılda túp nusqadan arxivlendi. Qaraldı: 20-iyul 2021-jıl.
- ↑ «C# Guide». Microsoft Learn. 13-avgust 2022-jılda túp nusqadan arxivlendi. Qaraldı: 28-iyul 2017-jıl.
- ↑ «5.0.8». microsoft.com. 23-aprel 2020-jılda túp nusqadan arxivlendi. Qaraldı: 20-iyul 2021-jıl.
- ↑ «Mitigation: New 64-bit JIT Compiler». microsoft.com. 5-aprel 2018-jılda túp nusqadan arxivlendi. Qaraldı: 20-iyul 2021-jıl.
- ↑ Etcheverry, Ignacio (October 21, 2017). "Introducing C# in Godot". https://godotengine.org/article/introducing-csharp-godot.