C Sharp (dasturlash tili) - C Sharp (programming language) - Wikipedia

C #
C Sharp wordmark.svg
ParadigmaTuzilgan, majburiy, ob'ektga yo'naltirilgan, tadbirlarga asoslangan, vazifaga asoslangan, funktsional, umumiy, aks ettiruvchi, bir vaqtda
OilaC
LoyihalashtirilganMicrosoft
TuzuvchiMicrosoft
Birinchi paydo bo'ldi2000; 20 yil oldin (2000)[1]
Barqaror chiqish
9.0[2] / 2020 yil 10-noyabr; 36 kun oldin (2020-11-10)
Matnni yozishStatik, dinamik,[3] kuchli, xavfsiz, nominativ, qisman xulosa qilingan
PlatformaUmumiy til infratuzilmasi
Litsenziya
Fayl nomi kengaytmalari.cs, .csx
Veb-saytcsharp.net
Mayor amalga oshirish
Visual C #, .NET Framework, Mono, .NET Core, DotGNU (to'xtatilgan), Universal Windows platformasi
Lahjalar
, Spec #, Polifonik C #, Kengaytirilgan C #
Ta'sirlangan
C ++,[6] , Eyfel, F #,[a] Xaskell, Belgisi, J #, J ++, Java,[6] ML, Modula-3, Ob'ekt Paskal,[7] Zang, VB
Ta'sirlangan
Chapel,[8] Klojure,[9] Kristal,[10] D., J #, Dart,[11] F #, Hack, Java,[12][13] Kotlin, Nemerle, Kislorod, Uzuk,[14] Zang, Tez,[15] Vala, TypeScript

C # (talaffuz qilinadi) o'tkirni ko'ring, musiqiy nota singari C♯, lekin bilan yozilgan raqam belgisi )[b] umumiy maqsadga muvofiq, ko'p paradigma dasturlash tili statik yozuvni o'z ichiga olgan, kuchli yozuv, leksik jihatdan qamrab olingan, majburiy, deklarativ, funktsional, umumiy, ob'ektga yo'naltirilgan (sinf asoslangan) va tarkibiy qismga yo'naltirilgan dasturlash fanlari.[16]

C # 2000 yilga kelib ishlab chiqilgan Microsoft uning bir qismi sifatida .NET tashabbusi va keyinchalik an sifatida tasdiqlangan xalqaro standart tomonidan Ekma (ECMA-334) 2002 yilda va ISO (ISO / IEC 23270) 2003 yilda. U tomonidan ishlab chiqilgan Anders Xeylsberg, va hozirda uning ishlab chiquvchilar guruhi uchun mo'ljallangan dasturlash tillaridan biri bo'lgan Mads Torgersen rahbarlik qilmoqda Umumiy til infratuzilmasi (CLI). Eng so'nggi versiyasi - 9.0, 2020 yilda .NET 5.0 da chiqarilgan va kiritilgan Visual Studio 2019 16.8 versiyasi.[17][18]

Mono rivojlantirish uchun bepul va ochiq manbali loyihadir o'zaro faoliyat platforma kompilyator va ish vaqti muhiti (ya'ni virtual mashina ) til uchun.

Dizayn maqsadlari

Ecma standartida C # uchun ushbu dizayn maqsadlari keltirilgan:[16]

  • Til sodda, zamonaviy, umumiy maqsadga mo'ljallangan, ob'ektga yo'naltirilgan dasturlash til.
  • Til va ularni amalga oshirish dasturiy ta'minot kabi printsiplarni qo'llab-quvvatlashi kerak kuchli tur tekshirish, qator chegaralarni tekshirish, foydalanishga urinishlarni aniqlash boshlanmagan o'zgaruvchilar va avtomatik axlat yig'ish. Dasturiy ta'minotning mustahkamligi, chidamliligi va dasturchining mahsuldorligi muhimdir.
  • Til rivojlanishda foydalanish uchun mo'ljallangan dasturiy ta'minot komponentlari tarqatilgan muhitda joylashtirish uchun mos.
  • Portativlik manba kodlari va dasturchilar uchun juda muhimdir, ayniqsa tanish bo'lganlar C va C ++.
  • Qo'llab-quvvatlash xalqarolashtirish juda muhim.
  • C # har ikkala joylashtirilgan va mos keladigan dasturlarni yozish uchun mo'ljallangan o'rnatilgan tizimlar, murakkab ishlatadigan juda katta hajmdan tortib operatsion tizimlar, bag'ishlangan funktsiyalarga ega bo'lgan juda kichikgacha.
  • Garchi C # dasturlari xotira va jihatidan tejamli bo'lishga mo'ljallangan ishlov berish quvvati talablar, til C yoki montaj tili bilan ishlash va hajm bo'yicha to'g'ridan-to'g'ri raqobatlashishni mo'ljallamagan.

Tarix

.NET Framework-ni ishlab chiqish paytida sinf kutubxonalari dastlab a yordamida yozilgan boshqariladigan kod kompilyator tizimi deb nomlangan "Oddiy boshqariladigan C" (SMC).[19][20] 1999 yil yanvar oyida, Anders Xeylsberg degan ma'noni anglatuvchi "Cool" deb nomlangan yangi tilni yaratish uchun jamoani tuzdi.C ga o'xshash Ob'ektga yo'naltirilgan til ".[21] Microsoft "Cool" nomini tilning yakuniy nomi sifatida saqlashni o'ylagan edi, ammo savdo markasi sabablari tufayli bunday qilmaslikni tanladi. O'sha paytda .NET loyihasi 2000 yil iyul oyida ommaviy ravishda e'lon qilindi Professional ishlab chiquvchilar konferentsiyasi, til C # deb o'zgartirildi va sinf kutubxonalari va ASP.NET ish vaqti C # ga o'tkazildi.

Hejlsberg C # ning asosiy dizayneri va Microsoft-ning etakchi me'mori bo'lib, ilgari uning dizayni bilan shug'ullangan Turbo Paskal, Embarcadero Delphi (avvalgi CodeGear Delphi, Inprise Delphi va Borland Delphi) va Visual J ++. Intervyu va texnik hujjatlarda u kamchiliklar borligini aytdi[22] aksariyat asosiy dasturlash tillarida (masalan.) C ++, Java, Delphi va Kichik munozarasi ) ning asoslarini boshqargan Umumiy til ishlash vaqti (CLR), bu esa o'z navbatida C # tilining dizaynini boshqargan.

Jeyms Gosling, kim yaratgan Java dasturlash tili 1994 yilda va Bill Joy, hammuassisi Quyosh mikrosistemalari, Java yaratuvchisi, C # ni "taqlid" deb nomlangan; Gosling yana "[C # - bu ishonchliligi, mahsuldorligi va xavfsizligi o'chirilgan Java turidir" dedi.[23][24] Klaus Kreft va Angelika Langer (C ++ oqimlari kitobi mualliflari) blogida "Java va C # deyarli bir xil dasturlash tillari. Zerikarli takrorlash, yangilik etishmayotgan"[25] "Hech kim Java yoki C # dasturlarni yozish uslubimizni o'zgartirgan inqilobiy dasturlash tillari deb da'vo qilishi mumkin" va "C # Java-dan juda ko'p qarz oldi va aksincha. Endi C # qo'llab-quvvatlaydi boks va biz qutilarini ochish uchun Java-da juda o'xshash xususiyatga ega bo'lamiz. "[26]2000 yil iyul oyida Hejlsberg C # "Java klon emas" va uning dizayni bo'yicha "C ++ ga juda yaqin" dedi.[27]

2005 yil noyabr oyida C # 2.0 chiqarilgandan buyon C # va Java tillari tobora ajralib turuvchi traektoriyalarda rivojlanib, bir-biridan farq qiladigan ikkita tilga aylandi. Birinchi yirik jo'nashlardan biri qo'shilish bilan birga keldi umumiy narsalar ikkala tilga, juda xilma-xil dasturlar bilan. C # foydalanadi reifikatsiya bilan boshqa sinflar singari ishlatilishi mumkin bo'lgan "birinchi darajali" umumiy ob'ektlarni taqdim etish kod yaratish sinf yuk paytida bajarilgan.[28]Bundan tashqari, C # funktsional uslubdagi dasturlarni joylashtirish uchun bir nechta asosiy funktsiyalarni qo'shdi LINQ C # 3.0 bilan chiqarilgan kengaytmalar va uning qo'llab-quvvatlash doirasi lambda iboralari, kengaytirish usullari va noma'lum turlari.[29] Ushbu funktsiyalar C # dasturchilariga, masalan, funktsional dasturlash texnikasidan foydalanishga imkon beradi yopilish, ularni qo'llash foydali bo'lganda. LINQ kengaytmalari va ishlab import, ishlab chiqaruvchilarga miqdorini kamaytirishga yordam beradi qozon plitasi ma'lumotlar bazasini so'rov qilish, xml faylini tahlil qilish yoki ma'lumotlar strukturasini qidirish, diqqatni o'qish va saqlash imkoniyatlarini yaxshilashga yordam beradigan dastur mantig'iga o'tkazish kabi umumiy vazifalarga kiritilgan.[30]

C # avval ishlatilgan maskot Andy deb nomlangan (Anders Xeylsberg nomi bilan). 2004 yil 29 yanvarda nafaqaga chiqqan.[31]

C # dastlab ko'rib chiqish uchun JTC 1 / SC 22 ISO kichik qo'mitasiga yuborilgan,[32] ISO / IEC 23270: 2003 bo'yicha,[33] qaytarib olindi va keyinchalik ISO / IEC 23270: 2006 bo'yicha tasdiqlandi.[34] 23270: 2006 23270: 2018 ostida olib qo'yilgan va ushbu versiya bilan tasdiqlangan.[35]

Ism

Microsoft birinchi marta 1988 yilda C tilining qo'shimcha kompilyatsiya uchun mo'ljallangan varianti uchun ishlatgan.[36] Ushbu loyiha tugallanmagan, ammo nomi saqlanib qolgan.

"C sharp" nomi musiqiy yozuvlardan ilhomlanib, a o'tkir belgi yozma eslatma yozilishi kerakligini bildiradi yarim tonna yuqori balandlik.[37]Bu til nomiga o'xshaydi C ++, bu erda "++" o'zgaruvchini baholashdan keyin 1 ga oshirish kerakligini bildiradi. O'tkir belgi ham a ga o'xshaydi ligature to'rtta "+" belgilaridan (ikkitadan-ikkita katakchaga), bundan tashqari bu til C ++ pog'onasi ekanligini anglatadi.[38]

Displeyning texnik cheklovlari (standart shriftlar, brauzerlar va boshqalar) va aniq belgisi (U + 266F MUSIC SHARP BELGISI (HTML♯ · & o'tkir;)) ko'p hollarda mavjud emas klaviatura sxemalari, raqam belgisi (U + 0023 # RAQAMNING BELGISI (HTML# · & num;)) dasturlash tilining yozma nomidagi aniq belgini taxmin qilish uchun tanlangan.[39]Ushbu konventsiya ECMA-334 C # Til spetsifikatsiyasida aks ettirilgan.[16]

"O'tkir" qo'shimchasini mavjud bo'lgan tillarning variantlari bo'lgan bir qator boshqa .NET tillari ishlatgan, shu jumladan J # (Java 1.1-dan olingan Microsoft tomonidan ishlab chiqilgan .NET tili), A # (dan.) Ada ), va funktsional dasturlash til F #.[40] Ning asl amalga oshirilishi .NET uchun Eyfel Eyfel # deb nomlangan,[41] to'liq ismdan beri nafaqaga chiqqan ism Eyfel endi til qo'llab-quvvatlanadi. Qo'shimchasi uchun ham ishlatilgan kutubxonalar, kabi Gtk # (a .NET doka uchun GTK + va boshqalar GNOME kutubxonalar) va Kakao # (o'rash uchun Kakao ).

Versiyalar

VersiyaTilning spetsifikatsiyasiSana.NETVisual Studio
EkmaISO / IECMicrosoft
C # 1.02002 yil dekabr2003 yil aprel2002 yil yanvar2002 yil yanvar.NET Framework 1.0Visual Studio .NET 2002
C # 1.1
C # 1.2
2003 yil oktyabr2003 yil aprel.NET Framework 1.1Visual Studio .NET 2003
C # 2.02006 yil iyun2006 yil sentyabr2005 yil sentyabr[c]2005 yil noyabr.NET Framework 2.0
.NET Framework 3.0
Visual Studio 2005
Visual Studio 2008
C # 3.0Yo'q2007 yil avgust2007 yil noyabr.NET Framework 2.0 (LINQdan tashqari)[42]

.NET Framework 3.0 (LINQdan tashqari)[42]
.NET Framework 3.5

Visual Studio 2008
C # 4.02010 yil aprel2010 yil aprel.NET Framework 4Visual Studio 2010
C # 5.02017 yil dekabr2018 yil dekabr2013 yil iyun2012 yil avgust.NET Framework 4.5Visual Studio 2012
Visual Studio 2013
C # 6.0Yo'qQoralama2015 yil iyul.NET Framework 4.6
.NET Core 1.0
.NET Core 1.1
Visual Studio 2015
C # 7.0Shartnoma bo'yicha taklif2017 yil mart.NET Framework 4.7Visual Studio 2017 15.0 versiyasi
C # 7.1Shartnoma bo'yicha taklif2017 yil avgust.NET Core 2.0Visual Studio 2017 15.3 versiyasi[43]
C # 7.2Shartnoma bo'yicha taklif2017 yil noyabrVisual Studio 2017 versiya 15.5[44]
C # 7.3Shartnoma bo'yicha taklif2018 yil may.NET Core 2.1
.NET Core 2.2
.NET Framework 4.8
Visual Studio 2017 15.7 versiyasi[44]
C # 8.0Shartnoma bo'yicha taklif2019 yil sentyabr.NET Core 3.0
.NET Core 3.1
Visual Studio 2019 16.3 versiyasi[45]
C # 9.0Shartnoma bo'yicha taklif2020 yil sentyabr.NET 5.0Visual Studio 2019 versiya 16.8, oldindan ko'rish 4[45]

Yangi xususiyatlar

C # 2.0 (2005)
C # 3.0 (2007)
C # 4.0 (2010)
  • Dinamik majburiy[49]
  • Nomlangan va ixtiyoriy argumentlar[49]
  • Umumiy ko- va qarama-qarshilik[49]
  • O'rnatilgan interop turlari ("NoPIA")[49]
C # 5.0[50] (2012)
C # 6.0 (2015)
C # 7.0[53][54] (2017)
  • O'zgaruvchan deklaratsiyani ichki qatorga qo'ying
  • Naqshni moslashtirish
  • Tupl turlari va tuple literallari
  • Dekonstruktsiya
  • Mahalliy funktsiyalar
  • Raqamli ajratgichlar
  • Ikkilik adabiyotlar
  • Ref qaytadi va mahalliy aholi
  • Umumiy asenkron qaytish turlari
  • Konstruktorlar va yakunlovchi tashkilotlarning ifodalari
  • Gapni aniqlaydiganlar va belgilovchilar
  • Uloqtirish ham ifoda sifatida ishlatilishi mumkin
C # 7.1[55] (2017)
  • Async main
  • Odatiy iboralar
  • Tople elementlari nomlari
C # 7.2[56] (2017)
  • Qiymat turlari bilan mos yozuvlar semantikasi
  • Keyingi emas nomlangan argumentlar
  • Raqamli harflar bo'yicha etakchi chiziqlar
  • shaxsiy himoyalangan kirish modifikatori
C # 7.3[57] (2018)
  • Belgilangan maydonlarga mahkamlashsiz kirish
  • Ref mahalliy o'zgaruvchilarini qayta tayinlash
  • Stackalloc massivlarida initsializatorlardan foydalanish
  • Naqshni qo'llab-quvvatlaydigan har qanday turdagi sobit bayonotlardan foydalanish
  • Qo'shimcha umumiy cheklovlardan foydalanish
C # 8.0[58] (2019)
  • faqat o'qing a'zolar
  • Standart interfeys a'zolari
  • almashtirish iboralar
  • Mulk, Tuple va pozitsion naqshlar
  • foydalanish deklaratsiyalar
  • statik mahalliy funktsiyalar
  • Bir martalik ref struct
  • Nolga mos yozuvlar turlari
  • Indekslar va qatorlar
  • Birlashtiruvchi topshiriq
  • Asenkron oqimlar
C # 9.0[59] (2020)
  • Yozuvlar
  • Init faqat o'rnatuvchilar
  • Yuqori darajadagi bayonotlar
  • Naqshga mos keladigan yaxshilanishlar
  • Mahalliy kattalikdagi butun sonlar
  • Funktsiya ko'rsatkichlari
  • Yaltirayotgan mahalliy bayroqni bostirish
  • Maqsad bilan terilgan yangi iboralar
  • statik anonim funktsiyalar
  • Maqsad bilan terilgan shartli iboralar
  • Kovariant qaytish turlari
  • Kengaytma GetEnumerator uchun qo'llab-quvvatlash har biriga ko'chadan
  • Lambda parametrlarini bekor qilish
  • Mahalliy funktsiyalar bo'yicha atributlar
  • Modulni boshlovchi
  • Qisman usullar uchun yangi xususiyatlar

Sintaksis

C # tilining asosiy sintaksisi C, C ++ va Java kabi boshqa C uslubidagi tillarga o'xshaydi, xususan:

Ajralib turadigan xususiyatlar

C # ning C, C ++ va Java-dan ajralib turadigan ba'zi bir muhim xususiyatlari quyidagilar:

Portativlik

Dizayniga ko'ra, C # dasturlash tili bo'lib, uning negizini bevosita aks ettiradi Umumiy til infratuzilmasi (CLI).[60] Uning ichki turlarining aksariyati CLI doirasi tomonidan amalga oshiriladigan qiymat turlariga mos keladi. Biroq, tilning spetsifikatsiyasi kompilyatorning kod yaratish talablarini bildirmaydi: ya'ni C # kompilyatori Umumiy Til Ishlash vaqtini nishonlashi yoki yaratishi shart emas. Umumiy oraliq til (CIL) yoki boshqa har qanday aniq formatni yaratish. Nazariy jihatdan C # kompilyatori C ++ yoki an'anaviy kompilyatorlari kabi mashina kodini yaratishi mumkin Fortran.

Yozish

C # kalit so'z bilan kuchli bosilgan o'zgaruvchan deklaratsiyani qo'llab-quvvatlaydi varva kalit so'z bilan yopiq tarzda terilgan massivlar yangi [] so'ngra to'plamni boshlovchi.

C # qat'iylikni qo'llab-quvvatlaydi Mantiqiy ma'lumotlar turi, bool. Kabi shartlarni talab qiladigan bayonotlar esa va agar, amalga oshiradigan turdagi ifodani talab qiladi to'g'ri mantiqiy turi kabi operator. C ++ da mantiqiy turga ega bo'lsa-da, uni butun sonlarga va kabi ifodalarga erkin aylantirish mumkin. agar (a) faqat shuni talab qiladi a bool-ga aylantiriladi, ruxsat beradi a int yoki ko'rsatgich bo'lishi. Dasturchilar aynan qaytadigan iboralarni ishlatishga majbur qilishlari sababli, C # ushbu "haqiqiy yoki noto'g'ri" degan ma'noni anglatuvchi tamsayıga yo'l qo'ymaydi. bool kabi dasturiy xatolarning ayrim turlarini oldini olish mumkin agar (a = b) (topshiriqdan foydalanish = tenglik o'rniga ==).

C # ko'proq xavfsiz turi C ++ dan ko'ra. Faqat yashirin konversiyalar sukut bo'yicha xavfsiz deb hisoblanadiganlar, masalan, butun sonlarni kengaytirish. Bu kompilyatsiya vaqtida, paytida amalga oshiriladi JIT, va ba'zi hollarda, ish vaqtida. Mantiqiy va tamsayılar orasida, shuningdek, ro'yxatga olish a'zolari va tamsayılar o'rtasida hech qanday aniq konversiyalar bo'lmaydi (har qanday sanab o'tilgan turga bilvosita aylantirilishi mumkin bo'lgan 0 harfidan tashqari). Har qanday foydalanuvchi tomonidan belgilangan konversiya, C ++ dan farqli o'laroq, aniq yoki yopiq deb belgilanishi kerak nusxa ko'chirish konstruktorlari va konvertatsiya operatorlari, bu ikkalasi ham sukut bo'yicha yashirin.

C # uchun aniq yordam mavjud kovaryans va qarama-qarshilik umumiy turlarda, C ++ dan farqli o'laroq, kontravariantsni virtual usullar bo'yicha qaytarish turlarining semantikasi orqali qo'llab-quvvatlaydi.

Hisoblash a'zolar o'zlariga joylashtirilgan qamrov doirasi.

C # tili global o'zgaruvchilar yoki funktsiyalarga ruxsat bermaydi. Barcha usullar va a'zolar sinflar ichida e'lon qilinishi kerak. Ommaviy sinflarning statik a'zolari global o'zgaruvchilar va funktsiyalarni almashtirishi mumkin.

Mahalliy o'zgaruvchilar qila olmaydi soya atrofdagi blokning o'zgaruvchilari, C va C ++ dan farqli o'laroq.

Metaprogramma

Metaprogramma orqali C # atributlari tilning bir qismidir. Ushbu atributlarning aksariyati GCC va VisualC ++ platformalariga bog'liq bo'lgan preprocessor ko'rsatmalarining funktsiyalarini takrorlaydi.

Usullari va funktsiyalari

C # dagi usul - bu sinf xususiyatining shunchaki qiymatni ushlab turish qobiliyatiga emas, balki funktsiya (ko'rsatmalar ketma-ketligi) sifatida chaqirilishi mumkin bo'lgan sinf a'zosi. Boshqa sintaktik o'xshash tillarda bo'lgani kabi, C ++ va ANSI C, uslubning imzosi tartibda o'z ichiga olgan deklaratsiyadir: har qanday ixtiyoriy kirish kalit so'zlari (masalan.) xususiy), qaytarish turining aniq spetsifikatsiyasi (masalan intyoki kalit so'z bekor agar qiymat qaytarilmasa), usulning nomi va nihoyat, har biri parametr turi, uning rasmiy nomi va ixtiyoriy ravishda, hech kim ko'rsatilmasa, foydalaniladigan standart qiymatdan tashkil topgan vergul bilan ajratilgan parametr spetsifikatsiyalarining qavslar qatori. Muayyan o'ziga xos usul turlari, masalan, qaytish qiymati yoki belgilanishi bilan sinf xususiyatini olish yoki o'rnatish kabi, to'liq imzo talab qilinmaydi, ammo umumiy holda, sinf ta'rifi uning usullarining to'liq imzo deklaratsiyasini o'z ichiga oladi.

C ++ singari va Java-dan farqli o'laroq, C # dasturchilari miqyosni o'zgartiruvchi kalit so'zdan foydalanishi kerak virtual usullarni pastki sinflar tomonidan bekor qilinishiga ruxsat berish.[61]

Kengaytirish usullari C # da dasturchilarga statik usullardan xuddi sinfning metodlar jadvalidagi usullar kabi foydalanishga ruxsat berib, dasturchilarga ushbu ob'ekt va uning hosilalari ustida mavjud bo'lishi kerak deb hisoblagan usullarni qo'shishga imkon beradi.

Turi dinamik JavaScript-ga o'xshash usul qo'ng'iroqlari va ish vaqti ob'ekti tarkibini yaratishga imkon beradigan ish vaqti usulini bog'lashga imkon beradi.

C # kalit so'z orqali kuchli yozilgan funktsiya ko'rsatgichlarini qo'llab-quvvatlaydi delegat. Qt ramkasining psevdo-C ++ singari signal va uyasi, C # nashr qilish-obuna uslubi tadbirlarini atrofidagi semantikaga ega, ammo C # buni amalga oshirish uchun delegatlarni ishlatadi.

C # Java-ga o'xshash narsalarni taklif qiladi sinxronlashtirildi atribut orqali usul qo'ng'iroqlari [MethodImpl (MethodImplOptions.Synchronized)]va qo'llab-quvvatlaydi o'zaro eksklyuziv qulflar kalit so'z orqali qulflash.

Mulk

C # bilan sinfni qo'llab-quvvatlaydi xususiyatlari. Xususiyatlari yordamchi maydonga ega oddiy kirish funktsiyalari yoki getter va setter funktsiyalarini bajarishi mumkin.

C # 3.0 dan beri sintaktik shakar avtomatik ravishda amalga oshiriladigan xususiyatlar mavjud,[62] qaerda accessor (getter) va mutator (setter) bitta operatsiyani kapsulalash xususiyat sinf.

Ism maydoni

A C # ism maydoni Java bilan bir xil darajadagi kod izolyatsiyasini ta'minlaydi paket yoki C ++ ism maydoni, a ga juda o'xshash qoidalar va xususiyatlarga ega paket. Ism maydonlarini "foydalanib" sintaksis yordamida import qilish mumkin.[63]

Xotiraga kirish

C # da xotira manzillari ko'rsatgichlari faqat maxsus belgilangan bloklar ichida ishlatilishi mumkin xavfli, va xavfli kodli dasturlarni ishga tushirish uchun tegishli ruxsatlarga ehtiyoj bor. Ob'ektga kirishning aksariyati har doim "jonli" ob'ektga ishora qiluvchi yoki aniq belgilangan ob'ektga xavfsiz havolalar orqali amalga oshiriladi bekor qiymat; "o'lik" ob'ektga (axlat yig'ilgan) yoki tasodifiy xotira blokiga havola olishning iloji yo'q. Xavfsiz ko'rsatgich axlat yig'ilgan ob'ektlarga, massivga, mag'lubiyatga yoki stekka ajratilgan xotira blokiga havolalarni o'z ichiga olmaydigan "boshqarilmaydigan" qiymat turidagi namunani ko'rsatishi mumkin. Xavfsiz deb belgilanmagan kod hali ham ko'rsatgichlarni saqlashi va boshqarishi mumkin System.IntPtr yozing, lekin ularni ajratib bo'lmaydi.

Boshqariladigan xotirani aniq bo'shatish mumkin emas; o'rniga, u avtomatik ravishda axlat yig'iladi. Axlat yig'ish muammoni hal qiladi xotira sızdırıyor dasturchini ko'p hollarda endi kerak bo'lmagan xotirani bo'shatish uchun mas'uliyatni ozod qilish orqali. Ob'ektlarga havolani talab qilingan vaqtdan ko'proq saqlaydigan kod hali ham zarur bo'lgandan ko'ra ko'proq xotiradan foydalanishni boshdan kechirishi mumkin, ammo ob'ektga oxirgi murojaat chiqarilgandan so'ng xotira axlat yig'ish uchun mavjud bo'ladi.

Istisno

Dasturchilar uchun bir qator standart istisnolar mavjud. Standart kutubxonalardagi usullar ba'zi hollarda tizim istisnolarini muntazam ravishda tashlaydi va tashlangan istisnolar doirasi odatda hujjatlashtiriladi. Maxsus istisno sinflari, muayyan holatlarda kerak bo'lganda muayyan muomalani o'rnatishga imkon beradigan sinflar uchun belgilanishi mumkin.[64]

Istisnolar tekshirildi C # -da mavjud emas (Java-dan farqli o'laroq). Bu miqyosi va versiyalash imkoniyatlariga asoslangan ongli qaror bo'ldi.[65]

Polimorfizm

Aksincha C ++, C # qo'llab-quvvatlamaydi ko'p meros, garchi sinf istalgan sonini amalga oshirishi mumkin interfeyslar. Bu tilning etakchi me'morining asoratlarni oldini olish va butun CLI davomida me'moriy talablarni soddalashtirish bo'yicha dizayn qarori edi.

Xuddi shu nomdagi usulni o'z ichiga olgan bir xil interfeyslarni amalga oshirishda va bir xil turdagi parametrlarni bir xil tartibda (ya'ni bir xil imzo) qabul qilishda, shunga o'xshash Java, C # har ikkala interfeys uchun bitta usulga va agar kerak bo'lsa har bir interfeys uchun maxsus usullarga imkon beradi.

Biroq, Java-dan farqli o'laroq, C # qo'llab-quvvatlaydi operatorning ortiqcha yuklanishi. C #+ da eng ko'p yuklangan operatorlargina C # da ortiqcha yuklanishi mumkin.

Tilga oid so'rov (LINQ)

C # foydalanish qobiliyatiga ega LINQ .NET Framework orqali. Ishlab chiquvchi taqdim etilgan turli xil ma'lumot manbalarini so'rashi mumkin IEnumerable interfeys ob'ektda amalga oshiriladi. Bunga XML hujjatlari, ADO.NET ma'lumotlar bazasi va SQL ma'lumotlar bazalari kiradi.[66]

C # da LINQ dan foydalanish kabi afzalliklarga ega Intellisense qo'llab-quvvatlash, kuchli filtrlash qobiliyatlari, kompilyatsiya qilingan xatolarni tekshirish qobiliyati bilan turdagi xavfsizlik va turli xil manbalar bo'yicha ma'lumotlarni so'rash uchun izchillik.[67] C # va LINQ bilan ishlatilishi mumkin bo'lgan bir nechta turli xil til tuzilmalari mavjud va ular so'rovlar iboralari, lambda ifodalari, noma'lum turlar, yopiq terilgan o'zgaruvchilar, kengaytma usullari va ob'ektni boshlovchi.[68]

Funktsional dasturlash

Garchi C # 2.0 asosan muhim til bo'lsa-da, funktsional dasturlash uchun cheklangan yordamni taklif qildi birinchi darajali funktsiyalar va noma'lum delegatlar ko'rinishidagi yopilishlar. C # 3.0 funktsional dasturlashni qo'llab-quvvatlashni lambda ifodalari uchun engil sintaksis, kengaytma usullari (modullar uchun moslik) va ro'yxatni tushunish sintaksis "so'rovni tushunish" tili shaklida. C # 7.0 odatda funktsional tillarda mavjud bo'lgan funktsiyalarni qo'shadi, masalan, kornişlar va naqshlarni moslashtirish.[69]

Umumiy turdagi tizim

C # -da bor yagona tipli tizim. Ushbu birlashtirilgan turdagi tizim deyiladi Umumiy turdagi tizim (CTS).[70]

Birlashtirilgan tipdagi tizim shuni anglatadiki, barcha turlar, jumladan tamsayılar kabi ibtidoiylar, ning subklasslari Tizim.Ob'ekt sinf. Masalan, har bir turi meros qilib oladi ToString() usul.

Ma'lumot turlarining toifalari

CTS ma'lumotlar turlarini ikkita toifaga ajratadi:[70]

  1. Malumot turlari
  2. Qiymat turlari

Qiymat turlarining namunalari na mos yozuvlar identifikatoriga, na taqqoslash semantikasiga ega. Qiymat turlari bo'yicha tenglik va tengsizlikni taqqoslash, agar mos keladigan operatorlar haddan tashqari yuklanmasa, misollar ichidagi haqiqiy ma'lumotlar qiymatlarini taqqoslaydi. Qiymat turlari olingan Tizim.ValueType, har doim standart qiymatga ega va uni har doim yaratish va nusxalash mumkin. Qiymat turlarining ba'zi boshqa cheklovlari shundaki, ular bir-biridan kelib chiqa olmaydi (lekin interfeyslarni amalga oshirishi mumkin) va aniq sukut (parametrsiz) konstruktorga ega bo'lmaydi. Qiymat turlariga misol qilib, barcha ibtidoiy turlar kiradi int (imzolangan 32-bitli tamsayı), suzmoq (32-bitli IEEE suzuvchi nuqta raqami), char (16-bitli Unicode kod birligi) va Tizim.DateTime (ma'lum bir vaqtni nanosaniyali aniqlik bilan aniqlaydi). Boshqa misollar enum (sanoq) va tuzilmaviy (foydalanuvchi tomonidan belgilangan tuzilmalar).

Aksincha, mos yozuvlar turlarida referent identifikatsiya tushunchasi mavjud, ya'ni har ikkala misol ichidagi ma'lumotlar bir xil bo'lsa ham, mos yozuvlar turining har bir nusxasi har bir boshqa nusxadan ajralib turadi. Bu mos keladigan operatorlar haddan tashqari yuklanmagan bo'lsa (masalan, masalan, strukturaviy tenglikni emas, balki ma'lumotni tekshiradigan mos yozuvlar turlari uchun standart tenglik va tengsizlikni taqqoslashda aks etadi. Tizim.Ip). Ba'zi operatsiyalar har doim ham mumkin emas, masalan, mos yozuvlar turidagi namunani yaratish, mavjud nusxani nusxalash yoki mavjud bo'lgan ikkita misolda qiymat taqqoslashni amalga oshirish. Muayyan mos yozuvlar turlari bunday xizmatlarni jamoat konstruktorini oshkor qilish yoki tegishli interfeysni (masalan,) amalga oshirish orqali taqdim etishi mumkin Faqatgina yoki Taqqoslash mumkin emas). Malumot turlariga misollar ob'ekt (boshqa barcha C # sinflari uchun yakuniy asosiy sinf), Tizim.Ip (Unicode belgilar qatori) va Tizim.Array (barcha C # massivlari uchun asosiy sinf).

Ikkala turdagi toifalar ham foydalanuvchi tomonidan belgilangan turlar bilan kengaytiriladi.

Boks va quti

Boks qiymat turidagi ob'ektni mos mos yozuvlar turining qiymatiga aylantirish operatsiyasi.[70] C # -dagi boks aniq emas.

Qutidan chiqarish mos yozuvlar turidagi qiymatni (ilgari qutiga) qiymat turiga almashtirish operatsiyasi.[70] C # qutisidan qutini ochish aniq narsani talab qiladi gips turi. T tipidagi quti ob'ektni faqat T (yoki bo'sh T) qutisiga chiqarish mumkin.[71]

Misol:

int foo = 42;         // qiymat turi.ob'ekt bar = foo;     // foo satrga belgilanadi.int foo2 = (int)bar;  // qiymat turiga qutiga qaytarilmagan.

Kutubxonalar

C # spetsifikatsiyasi kompilyator kutgan turdagi va sinf kutubxonalarining minimal to'plamini batafsil bayon qiladi. Amalda, C # ko'pincha ba'zi bir amalga oshirish bilan ishlatiladi Umumiy til infratuzilmasi ECMA-335 sifatida standartlashtirilgan (CLI) Umumiy til infratuzilmasi (CLI).

Standart CLI spetsifikatsiyalaridan tashqari qo'shimcha funktsiyalarni ta'minlash uchun .NET ramka kutubxonalari ustiga quriladigan ko'plab savdo va jamoat sinflari kutubxonalari mavjud.[72]

C # tarkibiga kiritilgan istalgan kutubxonaga qo'ng'iroqlarni amalga oshirishi mumkin .NET kutubxonalari va ramkalari ro'yxati.

Misollar

Salom Dunyo

Quyida juda oddiy C # dasturi, klassik versiyasi "Salom Dunyo "misol:

foydalanish Tizim;// "Salom Dunyo" klassik dasturining versiyasisinf Dastur{    jamoat statik bekor Asosiy(mag'lubiyat[] kamon)    {        Konsol.WriteLine("Salom Dunyo!");    }}

Ushbu kod ushbu matnni konsol oynasida aks ettiradi:

Salom Dunyo!

Har bir satrning maqsadi bor:

foydalanish Tizim;

Yuqoridagi satr barcha turlarini import qiladi Tizim ism maydoni. Masalan, Konsol keyinchalik manba kodida ishlatilgan sinf Tizim ism maydoni, ya'ni uni to'liq nomini bermasdan foydalanish mumkin (bu nom maydonini o'z ichiga oladi).

// "Salom Dunyo" klassik dasturining versiyasi

Ushbu satr sharh; u dasturchi (lar) uchun kodni tavsiflaydi va hujjatlashtiradi.

sinf Dastur

Yuqorida a sinf uchun ta'rif Dastur sinf. Qavslar juftligi orasidagi hamma narsa bu sinfni tavsiflaydi.

{    ...}

Jingalak qavslar kod blokining chegaralarini belgilaydi. Ushbu birinchi misolda ular bosh va oxirni belgilaydilar Dastur sinf.

jamoat statik bekor Asosiy(mag'lubiyat[] kamon)

Bu dastur bajarilishini boshlaydigan sinf a'zosi usulini e'lon qiladi. .NET ish vaqti qo'ng'iroqlarni amalga oshiradi Asosiy usul. (Eslatma: Asosiy boshqa usul kabi boshqa joydan ham chaqirilishi mumkin, masalan. ning boshqa usulidan Dastur.) jamoat kalit so'z kompilyatorga metodni istalgan joydan istalgan sinf tomonidan chaqirilishi mumkinligini aytadi. The statik kalit so'z usulini misolsiz kirishga imkon beradi Dastur. Har bir konsol ilovasi Asosiy kirish nuqtasi e'lon qilinishi kerak statik aks holda dastur uchun bir misol kerak bo'ladi Dastur, lekin har qanday misol uchun dastur kerak bo'ladi. Buni hal qilib bo'lmaydigan qilib qo'ymaslik uchun dumaloq qaramlik, C # kompilyatorlarini qayta ishlash konsol dasturlari (yuqoridagi kabi), agar yo'q bo'lsa, xato haqida xabar bering statik Asosiy usul. The bekor kalit so'z buni e'lon qiladi Asosiy yo'q qaytish qiymati.

Konsol.WriteLine("Salom Dunyo!");

Ushbu satr chiqishni yozadi. Konsol ning statik klassi Tizim ism maydoni. Bu konsol dasturlari uchun standart kirish, chiqish va xato oqimlarining interfeysini ta'minlaydi. Dastur Konsol usul WriteLine, bu konsolda argumentli qatorni, satrni aks ettiradi "Salom Dunyo!".

GUI

A GUI misol:

foydalanish Tizim;foydalanish System.Windows.Forms;sinf Dastur{    statik bekor Asosiy()    {        MessageBox.Ko'rsatish("Salom Dunyo!");        Konsol.WriteLine("Deyarli bir xil dalilmi!");    }}

Ushbu misol oldingi misolga o'xshaydi, faqat a hosil qiladi dialog oynasi unda "Salom, dunyo!" uni konsolga yozish o'rniga.

Tasvirlar

Yana bir foydali kutubxona bu Tizim kutubxona, bu rasmlarni dasturiy ravishda chizish uchun ishlatiladi. Masalan:

foydalanish Tizim;foydalanish Tizim;jamoat sinf Misol{    jamoat statik Rasm img;    jamoat statik bekor Asosiy()    {        img = Rasm.Fayl("Image.png");    }}

Bu "Image.png" da saqlangan rasmga o'xshash rasm hosil qiladi.

Standartlashtirish va litsenziyalash

2001 yil avgust oyida Microsoft korporatsiyasi, Hewlett-Packard va Intel korporatsiyalari C # uchun texnik shartlarni taqdim etishga homiylik qilishdi, shuningdek Umumiy til infratuzilmasi (CLI) standartlar tashkilotiga Ecma International.2001 yil dekabrda ECMA ECMA-334 ni chiqardi C # tilining spetsifikatsiyasi. C # ga aylandi ISO 2003 yildagi standart (ISO / IEC 23270: 2003 - Axborot texnologiyalari - Dasturlash tillari - C #). ECMA bundan oldin 2002 yilning dekabrida C # ning ikkinchi nashri sifatida ekvivalent xususiyatlarni qabul qilgan edi.

2005 yil iyun oyida ECMA C # spetsifikatsiyasining 3-nashrini tasdiqladi va ECMA-334-ni yangiladi. Qo'shimchalar qisman sinflarni, noma'lum usullarni, bekor qilinadigan turlarni va umumiy narsalar (biroz C ++ ga o'xshash andozalar ).

2005 yil iyul oyida ECMA ISO / IEC JTC 1-ga taqdim etdi, ikkinchisining Fast-Track jarayoni, standartlar va tegishli TRlar orqali. Ushbu jarayon odatda 6-9 oy davom etadi.

C # tilining ta'rifi va CLI ostida standartlashtirilgan ISO va Ekma taqdim etadigan standartlar oqilona va kamsitilmaydigan litsenziyalash patent talablaridan himoya qilish.

Microsoft ochiq kodli ishlab chiquvchilarni OSP tomonidan qoplanadigan qismi uchun notijorat loyihalardagi patentlarni buzganligi uchun sudga murojaat qilmaslikka rozi bo'ldi.[73] Microsoft shuningdek, tegishli patentlarni tatbiq etmaslikka rozi bo'ldi Novell Novell-ning to'laydigan mijozlariga qarshi mahsulotlar[74] C #, .NET yoki Novell-ning .NET () ni amalga oshirishi aniq ko'rsatilmagan mahsulotlar ro'yxati bundan mustasno.Mono loyihasi ).[75] Biroq, Novell Mono hech qanday Microsoft patentlarini buzmasligini ta'kidlamoqda.[76] Microsoft shuningdek, patentga oid huquqlarni amalga oshirmaslik to'g'risida aniq bir bitim tuzdi Moonlight brauzerining plagini orqali olinadigan bo'lsa, bu Monoga bog'liq Novell.[77]

Amaliyotlar

Microsoft kompaniyasi rivojlanishiga rahbarlik qilmoqda ochiq manbali mos yozuvlar C # kompilyatorlari va vositalar to'plami, birinchi kompilyator Rozlin oraliq tilga (IL), ikkinchisiga RyuJIT,[78] bu dinamik va tezkor optimallashtirishni amalga oshiradigan va protsessorning oldingi uchi uchun mahalliy kodga IL-ni kompilyatsiya qiladigan JIT (hozirda ishlaydigan) kompilyatori.[79] RuyJIT ochiq manba bo'lib, c ++ da yozilgan.[80] Roslyn butunlay yozilgan boshqariladigan kod (C #) ochildi va funksiyalar API sifatida paydo bo'ldi. Shunday qilib, bu ishlab chiquvchilarga qayta ishlash va diagnostika vositalarini yaratishga imkon beradi.[4][81] Rasmiy dasturning ikkita tarmog'i - .NET (yopiq manbalar, Windows. Faqat .NET 4.6.2 dan beri) va .NET yadrosi (ochiq manba, multiplatform); .NET va .NET yadrosi bitta ochiq manbali dasturga aylanmoqda .NET 5.0.[82] .NET 4.6 da yangi JIT kompilyatori avvalgisini almashtirdi.[83][84]

Boshqa C # kompilyatorlari (ularning ba'zilari Umumiy til infratuzilmasi va .NET sinf kutubxonalari):

  • The Mono loyiha ochiq manba kodli C # kompilyatorini, ECMA spetsifikatsiyasida ko'rinadigan kerakli ramka kutubxonalarini, shu jumladan umumiy til infratuzilmasini to'liq ochiq manbali dasturini va .NET-ga qadar Microsoft mulkiy .NET sinf kutubxonalarini deyarli to'liq bajarilishini ta'minlaydi. 3.5. Mono 2.6 dan boshlab, amalga oshirish uchun hech qanday rejalar mavjud emas WPF; WF keyinchalik chiqarilishi rejalashtirilgan; ning faqat qisman bajarilishi mavjud SQL-ga LINQ va WCF.[85]
  • The Elementlar asboblar zanjiri RemObjects .NET, Java, Cocoa, Android, Windows, Linux va WebAssembly uchun C # -ni yig'uvchi RemObjects C # ni o'z ichiga oladi. * DotGNU loyihasi (hozirda ishlab chiqarilishi to'xtatilgan), shuningdek, ochiq kodli C # kompilyatorini taqdim etdi, bu umumiy til infratuzilmasining deyarli to'liq bajarilishini, shu jumladan ECMA spetsifikatsiyasida ko'rinadigan talab qilinadigan ramka kutubxonalarini va qolgan Microsoft mulkiy .NET sinf kutubxonalarining bir qismini tashkil etdi. .NET 2.0 ga (hujjatlashtirilmagan yoki ECMA spetsifikatsiyasiga kiritilmagan, ammo Microsoft standart .NET Framework tarqatilishiga kiritilgan).
  • Xamarin umumiy mobil va ish stoli operatsion tizimlari uchun C # kodini baza sifatida ishlatib, mahalliy kodga kompilyatsiya qilish uchun o'zaro faoliyat platforma dasturlarini ishlab chiqish vositalarini taqdim etadi.

Mono o'zaro faoliyat platforma xususiyati tufayli o'yin dvigatellari uchun keng tarqalgan tanlovdir[iqtibos kerak ]. The Birlik o'yin mexanizmi asosiy skript tili sifatida Mono C # dan foydalanadi. The Godot o'yin mexanizmi Microsoft tomonidan 24000 AQSh dollari miqdorida xayriya evaziga ixtiyoriy Mono C # modulini amalga oshirdi.[86]

Shuningdek qarang

Izohlar

  1. ^ asinx uchun
  2. ^ Konventsiya bo'yicha, a raqam belgisi oddiy matnda ikkinchi belgi uchun ishlatiladi; badiiy tasvirlarda, ba'zida haqiqiy o'tkir belgi ishlatiladi: C♯. Ammo ECMA 334 standart holatlar: "C # ismi LATIN CAPITAL LETTER C (U + 0043) deb yozilgan, undan keyin Raqam belgisi # (U + 0023)."
  3. ^ Microsoft C # 2.0 spetsifikatsiyasi hujjati faqat yangi 2.0 xususiyatlarini o'z ichiga oladi. Eski xususiyatlar uchun yuqoridagi 1,2 spetsifikatsiyadan foydalaning.

Adabiyotlar

  1. ^ "InfoQ eMag: C # 7-ni oldindan ko'rish".
  2. ^ ".NET 5.0-ni e'lon qilish".
  3. ^ Torgersen, Mads (2008 yil 27 oktyabr). "C # 4.0 da yangi xususiyatlar". Microsoft. Olingan 28 oktyabr, 2008.
  4. ^ a b "Roslyn .NET kompilyatori C # va Visual Basic tillarini boy kodli tahlil APIlari bilan ta'minlaydi: dotnet / roslyn". 2019 yil 13-noyabr - GitHub orqali.
  5. ^ "CoreCLR .NET Core uchun ish vaqti. U axlat yig'uvchi, JIT kompilyatori, ma'lumotlarning ibtidoiy turlari va past darajadagi sinflarni o'z ichiga oladi." Dotnet / coreclr ". 2019 yil 13-noyabr - GitHub orqali.
  6. ^ a b Naugler, Devid (2007 yil may). "C ++ va Java dasturchi uchun C # 2.0: konferentsiya seminari". Kollejlarda hisoblash fanlari jurnali. 22 (5). C # Java-ga kuchli ta'sir ko'rsatgan bo'lsa-da, u C ++ ta'sirida kuchli bo'lgan va C ++ va Java-ning avlodlari sifatida qaraladi.
  7. ^ Xemilton, Naomi (2008 yil 1 oktyabr). "Dasturlash tillarining A-Z: C #". Computerworld. Olingan 12 fevral, 2010. Biz hammamiz bu erda gigantlarning elkasida turibmiz va har qanday til avvalgilariga asoslanadi, shuning uchun biz C, C ++, Java, Delphi va boshqa barcha narsalardan qarzdormiz. (Anders Xeylsberg )
  8. ^ "Chapel spec (Rahmat)" (PDF). Cray Inc. 2015 yil 1-oktabr. Olingan 14 yanvar, 2016.
  9. ^ "Maykl Fogusning boy Xikki bo'yicha savol-javoblari". Arxivlandi asl nusxasi 2017 yil 11 yanvarda. Olingan 11 yanvar, 2017.
  10. ^ Borensvayg, Ari. "Crystal 0.18.0 chiqdi!". Bu Ruby va boshqa tillardan (C #, Go va Python kabi) juda ilhomlangan.
  11. ^ "Veb-tillar va VM-lar: Tezkor kod har doim modada. (V8, Dart) - Google I / O 2013". Olingan 22 dekabr, 2013.
  12. ^ Java 5.0 bir nechta yangi til xususiyatlarini qo'shdi ( loop uchun kengaytirilgan, avtookslash, vararglar va izohlar ), ular o'xshash (va raqobatdosh) C # tilida kiritilganidan keyin [1] [2]
  13. ^ Kornelius, Barri (2005 yil 1-dekabr). "Java 5 C # bilan ishlaydi". Oksford universiteti Hisoblash xizmatlari. Olingan 18 iyun, 2014. Menimcha, aynan C # Java tilidagi tub o'zgarishlarga sabab bo'lgan. (Barri Korniliy )
  14. ^ Ring jamoasi (2017 yil 5-dekabr). "Ring dasturlash tili va boshqa tillar". ring-lang.net. ring-lang.
  15. ^ Lattner, Kris (2014 yil 3-iyun). "Kris Lattnerning bosh sahifasi". Kris Lattner. Olingan 12 may, 2020. Swift tili - bu til mutaxassilari jamoasi, hujjatlarni tayyorlash bo'yicha mutaxassislar, kompilyatorni optimallashtirish ninjalari va g'oyalarni takomillashtirish va jangovar sinovlarda yordam berish uchun fikr-mulohazalarni bildirgan nihoyatda muhim ichki sinxronizatsiya guruhining tinimsiz mehnati samarasidir. Albatta, bu sohadagi boshqa ko'plab tillarda erishilgan tajribalardan, ob'ektiv-C, Rust, Haskell, Ruby, Python, C #, CLU va boshqa ro'yxatlash uchun juda ko'p fikrlardan foydalangan holda katta foyda oldi.
  16. ^ a b v C # tilining spetsifikatsiyasi (PDF) (4-nashr). Ecma International. 2006 yil iyun. Olingan 26 yanvar, 2012.
  17. ^ "Visual Studio 2019 oldindan ko'rish uchun nashrga oid eslatmalar". docs.microsoft.com. Olingan 15 oktyabr, 2020.
  18. ^ ".NET 5.0-ni yuklab oling (Linux, macOS va Windows)". Microsoft. Olingan 15 oktyabr, 2020.
  19. ^ Zander, Jeyson (2007 yil 22-noyabr). "Bir nechta tarixiy faktlar". Olingan 23 fevral, 2009.
  20. ^ Gutri, Skott (2006 yil 28-noyabr). "ASP.Net dastlab qaysi tilda yozilgan?". Arxivlandi asl nusxasi 2016 yil 24 iyunda. Olingan 21 fevral, 2008.
  21. ^ Xemilton, Naomi (2008 yil 1 oktyabr). "Dasturlash tillarining A-Z: C #". Computerworld. Olingan 1 oktyabr, 2008.
  22. ^ "Tafsilotlar". nilsnaegele.com. Olingan 7 aprel, 2019.
  23. ^ Uayli Vong (2002). "Nima uchun Microsoft C # emas". CNET: CBS Interactive. Olingan 28 may, 2014.
  24. ^ Bill Joy (2002 yil 7 fevral). "Microsoftning ko'r joyi". cnet.com. Olingan 12 yanvar, 2010.
  25. ^ Klaus Kreft va Anjelika Langer (2003). "Java va C # dan keyin - keyin nima bo'ladi?". Olingan 18 iyun, 2013.
  26. ^ Klaus Kreft va Anjelika Langer (2003 yil 3-iyul). "Java va C # dan keyin - keyin nima bo'ladi?". artima.com. Olingan 12 yanvar, 2010.
  27. ^ Osborn, Jon (2000 yil 1-avgust). "Deep Inside C #: Microsoft bosh me'mori Anders Xeylsberg bilan intervyu". O'Reilly Media. Olingan 14-noyabr, 2009. Iqtibos jurnali talab qiladi | jurnal = (Yordam bering)
  28. ^ "Generics (C # dasturlash bo'yicha qo'llanma)". Microsoft. Olingan 21 mart, 2011.
  29. ^ Don Box va Anders Hejlsberg (2007 yil fevral). "LINQ: .NET tiliga o'rnatilgan so'rov". Microsoft. Olingan 21 mart, 2011.
  30. ^ Mercer, Yan (2010 yil 15 aprel). "Nima uchun funktsional dasturlash va LINQ ko'pincha protsessual kodlardan yaxshiroqdir". abodit.com. Olingan 21 mart, 2011.
  31. ^ "Endi nafaqaga chiqadi". Dan Fernandez's Blog. Blogs.msdn.com. 2004 yil 29 yanvar. Olingan 4 oktyabr, 2012.
  32. ^ "Technical committees - JTC 1/SC 22 - Programming languages, their environments and system software interfaces". ISO. Olingan 4 oktyabr, 2012.
  33. ^ "ISO/IEC 23270:2003 - Information technology - C# Language Specification". Iso.org. August 23, 2006. Archived from asl nusxasi 2012 yil 8 mayda. Olingan 4 oktyabr, 2012.
  34. ^ "ISO/IEC 23270:2006 - Information technology - Programming languages - C#". Iso.org. 2012 yil 26-yanvar. Olingan 4 oktyabr, 2012.
  35. ^ "SO/IEC 23270:2018 Information technology — Programming languages — C#". ISO. Olingan 26-noyabr, 2020.
  36. ^ Mariani, Rico. "My History of Visual Studio (Part 1) – Rico Mariani's Performance Tidbits". Rico Mariani's Performance Tidbits.
  37. ^ Kovacs, James (September 7, 2007). "C#/.NET History Lesson". Olingan 18 iyun, 2009.
  38. ^ Hejlsberg, Anders (October 1, 2008). "The A-Z of Programming Languages: C#". Computerworld.
  39. ^ "Microsoft C# FAQ". Microsoft. Arxivlandi asl nusxasi 2006 yil 14 fevralda. Olingan 25 mart, 2008.
  40. ^ "F# FAQ". Microsoft tadqiqotlari. Arxivlandi asl nusxasi 2009 yil 18 fevralda. Olingan 18 iyun, 2009.
  41. ^ Simon, Raphael; Stapf, Emmanuel; Meyer, Bertrand (June 2002). "Full Eiffel on the .NET Framework". Microsoft. Olingan 18 iyun, 2009.
  42. ^ a b "Using C# 3.0 from .NET 2.0". Danielmoth.com. 2007 yil 13-may. Olingan 4 oktyabr, 2012.
  43. ^ "Visual Studio 2017 15.3 Release Notes". docs.microsoft.com.
  44. ^ a b "Visual Studio 2017 15.9 Release Notes". docs.microsoft.com.
  45. ^ a b "Visual Studio 2019 16.8 Release Notes". docs.microsoft.com.
  46. ^ a b v d e f g h men j k "What's new in the C# 2.0 Language and Compiler". Microsoft Developer Network. Microsoft. Olingan 11 iyun, 2014.
  47. ^ a b v d e f g h Hejlsberg, Anders; Torgersen, Mads. "Overview of C# 3.0". Microsoft Developer Network. Microsoft. Olingan 11 iyun, 2014.
  48. ^ Ghosh, Wriju. "C# 3.0 : Partial * Garbage Collection Methods". MSDN bloglari. Microsoft. Olingan 11 iyun, 2014.
  49. ^ a b v d Burrows, Chris. "C# 4.0 - New C# Features in the .NET Framework 4". Microsoft Developer Network. Microsoft. Olingan 11 iyun, 2014.
  50. ^ Hejlsberg, Anders. "Future directions for C# and Visual Basic". C# lead architect. Microsoft. Olingan 21 sentyabr, 2011.
  51. ^ a b "An Introduction to New Features in C# 5.0". MSDN bloglari. Microsoft. Olingan 11 iyun, 2014.
  52. ^ a b v d e f g h men j "Language feature implementation status". github. Microsoft. Olingan 13 fevral, 2015.
  53. ^ "What's new in C# 7". Microsoft Docs. 2016 yil 21-dekabr.
  54. ^ "New Features in C# 7.0". .NET Blog. Olingan 9 iyun, 2017.
  55. ^ "What's new in C# 7.1". Microsoft Docs. Olingan 9 oktyabr, 2017.
  56. ^ "What's new in C# 7.2". Microsoft Docs. Olingan 26-noyabr, 2017.
  57. ^ "What's new in C# 7.3". Microsoft Docs. Olingan 23 iyun, 2018.
  58. ^ "What's new in C# 8.0". Microsoft Docs.
  59. ^ BillWagner. "What's new in C# 9.0 - C# Guide". docs.microsoft.com. Olingan 15 oktyabr, 2020.
  60. ^ Visual Studio 2010 and .NET 4 Six-in-One. Wrox Press. 2010 yil. ISBN  978-0470499481.
  61. ^ "virtual (C# Reference)". docs.microsoft.com.
  62. ^ "Auto-Implemented Properties (C# Programming Guide)". Olingan 12 sentyabr, 2020.
  63. ^ "using directive - C# Reference". Microsoft Docs. Olingan 14 aprel, 2019.
  64. ^ "How to create user-defined exceptions". Olingan 12 sentyabr, 2020.
  65. ^ Venners, Bill; Eckel, Bruce (August 18, 2003). "The Trouble with Checked Exceptions". Olingan 30 mart, 2010.
  66. ^ Zhang, Xue Dong; Teng, Zi Mu; Zhao, Dong Wang (September 2014). "Research of the Database Access Technology Under.NET Framework". Applied Mechanics and Materials. 644-650: 3077–3080. doi:10.4028/www.scientific.net/AMM.644-650.3077. S2CID  62201466. ProQuest  1565579768.
  67. ^ Otey, Michael (February 2006). "LINQ to the Future". SQL Server Magazine. Vol. 8 yo'q. 2. pp. 17–21. ProQuest  214859896.
  68. ^ Sheldon, William (November 2010). "New Features in LINQ". SQL Server Magazine. Vol. 12 yo'q. 11. pp. 37–40. ProQuest  770609095.
  69. ^ "What's New in C# 7.0". Microsoft Docs. Olingan 14 aprel, 2019.
  70. ^ a b v d Archer, Tom (2001). "Part 2, Chapter 4: The Type System". Inside C#. Redmond, Vashington: Microsoft Press. ISBN  0-7356-1288-9.
  71. ^ Lippert, Eric (March 19, 2009). "Representation and Identity". Fabulous Adventures In Coding. Blogs.msdn.com. Olingan 4 oktyabr, 2012.
  72. ^ "Framework Libraries". docs.microsoft.com.
  73. ^ "Patent Pledge for Open Source Developers".
  74. ^ "Patent Cooperation Agreement - Microsoft & Novell Interoperability Collaboration". Microsoft. 2006 yil 2-noyabr. Arxivlangan asl nusxasi 2009 yil 17 mayda. Olingan 5 iyul, 2009. 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.
  75. ^ "Ta'riflar". Microsoft. 2006 yil 2-noyabr. Olingan 5 iyul, 2009.
  76. ^ Steinman, Justin (November 7, 2006). "Novell Answers Questions from the Community". Olingan 5 iyul, 2009. We maintain that Mono does not infringe any Microsoft patents.
  77. ^ "Covenant to Downstream Recipients of Moonlight - Microsoft & Novell Interoperability Collaboration". Microsoft. 2007 yil 28 sentyabr. Arxivlangan asl nusxasi 2010 yil 23 sentyabrda. Olingan 8 mart, 2008. "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.
  78. ^ https://devblogs.microsoft.com/dotnet/the-ryujit-transition-is-complete/
  79. ^ https://docs.microsoft.com/en-us/dotnet/standard/managed-execution-process
  80. ^ https://github.com/dotnet/coreclr/tree/master/src/jit
  81. ^ "C# Guide". docs.microsoft.com.
  82. ^ https://dotnet.microsoft.com/download/dotnet/5.0
  83. ^ https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/mitigation-new-64-bit-jit-compiler
  84. ^ https://devblogs.microsoft.com/dotnet/the-ryujit-transition-is-complete/
  85. ^ "Compatibility - Mono". Mono-project.com. 2011 yil 19-dekabr. Olingan 4 oktyabr, 2012.
  86. ^ Etcheverry, Ignacio (October 21, 2017). "Introducing C# in Godot". Godot Engine. Arxivlandi asl nusxasidan 2018 yil 26 oktyabrda. Olingan 26 oktyabr, 2018.

Qo'shimcha o'qish

Tashqi havolalar