C Terävä

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 7.6.2021 tarkistetusta versiosta . tarkastukset vaativat 59 muokkausta .
FROM#
Kieliluokka

moniparadigma :
oliosuuntautunut ,
yleinen , menettelyllinen , toiminnallinen , tapahtumapohjainen ,

heijastava
Esiintyi 2001
Tekijä Anders Hejlsberg
Kehittäjä .NET Foundation
Tiedostotunniste _ .cstai.csx
Vapauta 10.0 ( 8.11.2021 )
Testiversio 11 ( 22. helmikuuta 2022 )
Tyyppijärjestelmä staattinen , dynaaminen , tiukka , turvallinen , tyyppipäätelmä
Tärkeimmät toteutukset .NET Framework , Mono , .NET , DotGNU (jäädytetty) , Universal Windows Platform
Murteet , Spec# , Polyfoninen C# , Enhanced C#
Vaikutettu C++ , Java [1] [2] [3] , Delphi , Modula-3 ja Smalltalk
vaikutti , F# , Nemerle , Vala , Windows PowerShell , Kotlin
Lisenssi

Roslyn- kääntäjä : MIT-lisenssi [4]
.NET Core CLR : MIT-lisenssi [5]

Mono -kääntäjä : kaksois GPLv3 ja MIT/X11

DotGNU : kaksois - GPL ja LGPL
Verkkosivusto docs.microsoft.com/en-us…
Alusta Yhteisen kielen infrastruktuuri
 Mediatiedostot Wikimedia Commonsissa

C# (lausutaan c sharp ) on yleiskäyttöinen olio- ohjelmointikieli . Sen kehitti vuosina 1998-2001 Microsoftin insinöörien ryhmä Anders Hejlsbergin ja Scott Wilthaumotin [6] johdolla sovelluskehityskieleksi Microsoft .NET Framework- ja .NET Core -alustoille . Myöhemmin standardisoitiin ECMA -334- ja ISO / IEC 23270 -standardeiksi .

C# kuuluu C-kaltaisen syntaksin kieliperheeseen , josta sen syntaksi on lähinnä C++ :aa ja Javaa . Kieli on staattisesti kirjoitettu , tukee polymorfismia , operaattorien ylikuormitusta (mukaan lukien eksplisiittiset ja implisiittiset cast-operaattorit), delegaatteja , attribuutteja, tapahtumia , muuttujia , ominaisuuksia , yleisiä tyyppejä ja menetelmiä, iteraattoreita , anonyymejä toimintoja sulkemistuella , LINQ : ta , poikkeuksia , kommentteja XML :ssä muoto .

Otettuaan paljon käyttöön edeltäjistään - kielistä C++ , Delphi , Modula , Smalltalk ja erityisesti Java  - C#, niiden käyttökäytäntöön luottaen sulkee pois joitakin ohjelmistojärjestelmien kehittämisessä ongelmallisiksi osoittautuneita malleja. , esimerkiksi C#, toisin kuin C ++, ei tue luokkien moninkertaista periytymistä (sillä välin rajapintojen useat toteutukset ovat sallittuja ).

Kielen ominaisuudet

C# on suunniteltu sovellustason ohjelmointikieleksi CLR :lle , ja sellaisena se riippuu ensisijaisesti itse CLR:n ominaisuuksista. Tämä koskee ennen kaikkea C#-tyyppistä järjestelmää, joka heijastaa BCL:ää . Tiettyjen ekspressiivisten kielen ominaisuuksien olemassaolo tai puuttuminen määräytyy sen mukaan, voidaanko tietty kieliominaisuus kääntää vastaaviksi CLR-konstrukteiksi. Joten, kun CLR kehitettiin versiosta 1.1 versioon 2.0, itse C # rikastui merkittävästi; samanlaisia ​​vuorovaikutuksia on odotettavissa tulevaisuudessa (tämä malli kuitenkin katkesi C # 3.0:n julkaisun myötä, joka on kielilaajennus, joka ei ole riippuvainen .NET-alustan laajennuksista). CLR tarjoaa C#:n, kuten kaikki muutkin .NET -suuntautuneet kielet, monia ominaisuuksia, joita "klassisista" ohjelmointikielistä puuttuu. Esimerkiksi roskien keräämistä ei toteuteta itse C#:ssa, vaan CLR suorittaa sen C#:lla kirjoitetuille ohjelmille, aivan kuten VB.NET , J# jne. kirjoitetuille ohjelmille.

Kielen nimi

Nimi "Sharp" (englannin sanasta terävä - terävä) tulee aakkosellisesta nuotinkirjoituksesta , jossa latinalainen C -kirjain vastaa nuottia Do ja terävä merkki (englanniksi terävä) tarkoittaa nuottia vastaavan äänen lisääntymistä puolisävel [7] , joka on samanlainen kuin kielen nimi C++ , jossa "++" tarkoittaa muuttujaa inkrementtiä . Nimi on myös ketjupeli CC++ → C++++(C#), koska "#"-symboli voidaan esittää 4 "+"-merkistä koostuvana [8] .

Teknisistä näyttörajoituksista (vakiofontit, selaimet jne.) sekä siitä syystä, että terävää merkkiä ♯ ei esitetä tavallisella tietokoneen näppäimistöllä , ohjelmointikielen nimeä kirjoitettaessa käytetään punnan merkkiä (#) . [9] . Tämä käytäntö näkyy C#-kielimäärityksessä ECMA-334 [10] . Käytännössä (esimerkiksi mainoksissa ja laatikkosuunnittelussa [11] ) Microsoft kuitenkin käyttää terävää merkkiä.

Ohjelmointikielten nimiä ei ole tapana kääntää, joten kieltä kutsutaan transkription avulla "C Sharp".

Standardointi

C# on standardoitu ECMA :ssa (ECMA-334) [12] ja ISO :ssa (ISO/IEC 23270) [13] .

Tähän spesifikaatioon perustuvaa C#:n erillistä toteutusta on ainakin kolme, jotka ovat tällä hetkellä eri kehitysvaiheissa:

Versiot

C#-kielen kehittämisen aikana siitä julkaistiin useita versioita:

Versio Kielimääritys päivämäärä .NETTO visuaalinen studio
ECMA ISO/IEC Microsoft
C# 1.0 joulukuuta 2002 Huhtikuu 2003  (linkki ei saatavilla) tammikuuta 2002 tammikuuta 2002 .NET Framework 1.0 Visual Studio .NET (2002)
C# 1.1
C# 1.2
lokakuuta 2003 huhtikuuta 2003 .NET Framework 1.1 Visual Studio .NET 2003
C# 2.0 kesäkuuta 2006 Syyskuu 2006 Syyskuu 2005 [14] marraskuuta 2005 .NET Framework 2.0
.NET Framework 3.0
Visual Studio 2005
C# 3.0 Puuttuu [15] elokuu 2007 marraskuuta 2007 .NET Framework 2.0 (pois lukien LINQ )
.NET Framework 3.0 (pois lukien LINQ )
.NET Framework 3.5
Visual Studio 2008
C# 4.0 huhtikuuta 2010 huhtikuuta 2010 .NET Framework 4.0 Visual Studio 2010
C# 5.0 joulukuuta 2017 joulukuuta 2018 Kesäkuu 2013 Elokuu 2012 .NET Framework 4.5 Visual Studio 2012
C# 6.0 Puuttuu Heinäkuu 2015 .NET Framework 4.6
.NET Core 1.0
.NET Core 1.1
Visual Studio 2015
C# 7.0 Maaliskuu 2017 .NET Framework 4.6.2
.NET Framework 4.7
Visual Studio 2017 15.0
C# 7.1 Elokuu 2017 .NET Core 2.0 Visual Studio 2017 15.3
C# 7.2 marraskuuta 2017 Visual Studio 2017 15.5
C# 7.3 toukokuu 2018 .NET Core 2.1
.NET Core 2.2
.NET Framework 4.8
Visual Studio 2017 15.7
C# 8.0 Syyskuu 2019 .NET Core 3.0
.NET Core 3.1
.NET Framework 4.8
Visual Studio 2019 16.3
C# 9.0 Syyskuu 2020 .NET 5.0 Visual Studio 2019 16.8
C# 10.0 Heinäkuu 2021 .NET 6.0 Visual Studio 2022 17.0
Yleistä tietoa versioista
Versio Innovaatiot
C# 2.0
  • Osittaiset tyypit
  • Geneeriset tyypit ( geneeriset )
  • Iteraattorit ja avainsanayield
  • Anonyymit menetelmät
  • null -union- operaattori
  • Nullattavat tyypit
C# 3.0
  • Kieliintegroidut kyselyt ( LINQ )
  • Objektien ja kokoelman alustajat
  • Lambda-ilmaisut
  • Ilmaisupuut
  • Epäsuora kirjoittaminen ja avainsanavar
  • Anonyymit tyypit
  • Laajennusmenetelmät
  • Automaattiset ominaisuudet
C# 4.0
  • Dynaaminen linkittäminen ja avainsanadynamic
  • Nimetyt ja valinnaiset argumentit
  • Yleistynyt kovarianssi ja kontravarianssi
  • TPL kirjasto , tehtävän käsite ja luokat Task,Parallel
  • LuokkaMemoryCache
  • Rinnakkaiskokoelmaluokat
C# 5.0
  • TAP- malli
  • asynkroniset menetelmät asyncjaawait
  • Soittajan tiedot
C# 6.0
  • Kääntäjä palveluna
  • Staattisten tyyppien jäsenten tuonti nimiavaruuteen
  • Poikkeussuodattimet
  • awaitlohkoissa catch/finally
  • Autoomaisuuden alustajat
  • Automaattiset ominaisuudet vain luku -tilassa
  • null -ehdolliset operaatiot ( ?.ja ?[])
  • Merkkijonojen interpolointi
  • Operaattorinameof
  • Sanakirjan alustus
  • Toiminnot pelkistetty lausekkeisiin
C# 7.0 [16]
  • out-muuttujat
  • Kuvioiden yhteensopivuus
  • Mallit kanssais
  • Kuviot ja ilmeswitch
  • Tuples
  • Tuplejen purkaminen (dekonstruktorit)
  • Paikalliset toiminnot
  • Kirjaimellisia parannuksia
  • Paikalliset muuttujat ja palauttavat arvot viitteellä
  • Asynkronisilla menetelmillä palautettujen tyyppien luettelon laajentaminen
  • Lisää luokan jäseniä ilmauksina
  • throwilmaisuja
C# 8.0
  • Vain luku -jäsenet
  • Oletuskäyttöliittymän jäsenet
  • Kuvioiden yhteensopivuuden parannuksia
  • ilmoitusten avulla
  • Staattiset paikalliset toiminnot
  • Irrotettavat referenssirakenteet
  • Nullable-viitetyypit
  • Asynkroniset langat
  • Indeksit ja vaihteluvälit
  • NULL ammattiliiton tehtävä
  • Hallitsemattomat rakennetut tyypit
  • Stackalloc-lausekkeet sisäkkäisissä lausekkeissa
  • Lisää luokan jäseniä ilmauksina
  • Interpoloitu merkkijono parannuksia
C# 9.0
  • nollaliiton operaattori (??)
  • Tyhjät parametrit lambda-lausekkeille
  • Alkuperäinen Int: nint, nuint
  • erillinen liitto
  • Lisätty with-lausekkeet
  • uusi muuntajainitonly
C# 10.0
  • role="alert"Viestimääritteiden lisääminen
  • Lisättävät Counterkomponenttipäivityksetrole="status"
  • ul:n vaihtaminen NavBarkomponenttiinnav
  • Uusi vaihtopainikkeen nimiNavBar
  • Siirry semanttisempiin merkintöihin

Versio 1.0

C#-projekti aloitettiin joulukuussa 1998 ja sen koodinimi oli COOL (C-style Object Oriented Language). Versio 1.0 julkistettiin .NET-alustalla kesäkuussa 2000, samana vuonna kuin ensimmäinen julkinen beta . C# 1.0 julkaistiin lopulta Microsoft Visual Studio .NET:n kanssa helmikuussa 2002 .

C#:n ensimmäinen versio muistutti ominaisuuksiltaan Java 1.4:ää ja laajensi niitä jonkin verran: esimerkiksi C#:ssa oli ominaisuuksia ( jotka näyttivät koodissa objektikentiltä , mutta todellisuudessa niitä kutsuttiin luokkametodeina käytettäessä), indeksoijia (samankaltaisia ​​kuin ominaisuudet, mutta ottavat) parametri indeksitaulukona), tapahtumat , delegaatit , silmukat , arvojen välittämät rakenteet , sisäänrakennettujen tyyppien automaattinen muuntaminen objekteiksi tarvittaessa ( boxing ), attribuutit, sisäänrakennetut vuorovaikutuskeinot hallitsemattoman koodin kanssa ( DLL , COM ) ja enemmän. foreach

Lisäksi päätettiin siirtää C#:aan joitain C++-ominaisuuksia, joita Javassa ei ollut: allekirjoittamattomat tyypit, operaattorin ylikuormitus (joillain rajoituksilla, toisin kuin C++ ), parametrien välitys menetelmälle viittauksella , menetelmät vaihtelevalla parametrimäärällä, operaattori (rajoituksin). Myös C#:ssa he jättivät rajallisen mahdollisuuden työskennellä osoittimien kanssa  - sanalla erityisesti osoitetuissa koodipaikoissa ja määritettäessä kääntäjälle erikoisvaihtoehto . gotounsafe

Versio 2.0

Microsoft julkaisi C# 2.0 -spesifikaatioluonnoksen lokakuussa 2003 ; vuonna 2004 oli beta-julkaisuja (projekti koodinimeltään Whidbey), C# 2.0 julkaistiin lopulta 7. marraskuuta 2005 yhdessä Visual Studio 2005:n ja .NET 2.0:n kanssa.

Uusia ominaisuuksia versiossa 2.0

Versio 3.0

Kesäkuussa 2004 Anders Hejlsberg puhui ensimmäistä kertaa Microsoftin verkkosivustolla suunnitelluista kielilaajennuksista C#3.0:ssa [18] . Syyskuussa 2005 julkaistiin luonnos C# 3.0 -spesifikaatiosta ja C# 3.0:n beta-versio, joka asennetaan lisäosana olemassa oleviin Visual Studio 2005:een ja .NET 2.0:aan. Tämä kielen versio sisällytettiin lopulta Visual Studio 2008:aan ja .NET 3.5:een.

Uusia ominaisuuksia versiossa 3.0

C# 3.0 toi kieleen seuraavat radikaalit lisäykset:

Asiakas c = uusi asiakas (); c . Nimi = "James" ; c . Ikä = 30 ; voidaan kirjoittaa nimellä Asiakas c = uusi asiakas { Nimi = "James" , Ikä = 30 }; listOfFoo . Missä ( delegate ( Foo x ) { return x . size > 10 ; }); voidaan nyt kirjoittaa nimellä listOfFoo . jossa ( x => x . koko > 10 );
  • Ilmaisupuut:
lambda-lausekkeet voidaan nyt esittää tietorakenteena , joka voidaan kulkea ajon aikana, jolloin vahvasti kirjoitetut C#-lausekkeet voidaan kääntää muille toimialueille (kuten SQL-lausekkeille).
  • Implisiittinen kirjoittaminen: Paikallisen muuttujan tyyppien päätteleminen . Epäsuorassa kirjoituksessa käytetään avainsanaa tietotyypinvar nimen sijasta . Sitten kääntäjä itse päättelee käännöksen aikana tietotyypin määritetyn arvon var x = "hello";perusteella :string x = "hello";
  • Anonyymit tyypit:var x = new { Name = "James" };
  • Laajennusmenetelmät. Nyt voit lisätä uusia menetelmiä olemassa oleviin luokkiin. Toteutettu käyttämällä avainsanaa thisstaattisen luokan staattisen funktion ensimmäisessä parametrissa.
public static class StringExtensions { public static int ToInt32 ( tämä merkkijono val ) { return Int32 . jäsentää ( val ); } } // ... merkkijono s = "10" ; int x = s . ToInt32 ();
  • Automaattiset ominaisuudet: kääntäjä luo yksityisen ( yksityisen ) kentän ja vastaavan aksesorin ja mutaattorin lomakkeen koodille
julkinen merkkijono Nimi { get ; yksityinen sarja ; }

C# 3.0 on yhteensopiva C# 2.0:n kanssa MSIL :n luomassa koodissa; kielen parannukset ovat puhtaasti syntaktisia ja ne toteutetaan käännösvaiheessa. Esimerkiksi monet integroidut LINQ-kyselyt voidaan tehdä käyttämällä anonyymejä delegaatteja yhdistettynä predikaattimenetelmiin konteissa, kuten List.FindAllja List.RemoveAll.

Versio 4.0

C# 4.0:n esikatselu julkaistiin vuoden 2008 lopulla sekä Visual Studio 2010:n CTP-versio.

Visual Basic 10.0 ja C# 4.0 julkaistiin huhtikuussa 2010 Visual Studio 2010:n kanssa.

Uusia ominaisuuksia versiossa 4.0 [19]
  • Kyky käyttää myöhäistä sidontaa, käyttää:
    • dynaamisesti kirjoitetuilla kielillä ( Python , Ruby )
    • COM-objektien kanssa
    • heijastus
    • muuttuvat rakenneobjektit (DOM). Avainsana tulee näkyviin dynamic.
  • Nimetyt ja valinnaiset parametrit
  • Mitä uutta COM-yhteistoiminnassa
  • Yleisten rajapintojen ja delegaattien kovarianssi ja kontravarianssi
  • Koodisopimukset _
  • TPL Task Parallel Library , Tehtävän käsite ja luokat Task, TaskFactory,Parallel
  • Lisätty luokka MemoryCache, joka on suunniteltu sisällön välimuistiin. Se on samanlainen kuin CacheASP.NET-luokka, mutta sitä voidaan käyttää kirjoitettaessa web-/grafiikka-/ konsolisovelluksia .
  • Lisätty System.Collections.Concurrent- nimiavaruus ja uudet samanaikaiset kokoelmaluokat ( ConcurrentQueue , ConcurrentStack , ConcurrentBag ,…), jotka tarjoavat paitsi enemmän tehokkuutta myös täydellisemmän säikeen turvallisuuden.

Esimerkkejä:

dynaaminen laskenta = GetCalculator (); intsum = laskelma _ _ Lisää ( 10 , 20 ); // Dynaaminen puhelu public void SomeMethod ( int x , int y = 5 , int z = 7 ); // Valinnaiset parametrit

Versio 5.0

Uusia ominaisuuksia versiossa 5.0

  • TAP (Task-based Asynchronous Pattern). TAP käyttää yhtä menetelmää asynkronisen toiminnon alustuksen ja loppuun saattamiseksi.
  • Asynkroniset menetelmät ( asyncja await) - TAP-kuvion toteutuksena.
  • Soittajan tiedot

Versio 6.0

Uusia ominaisuuksia versiossa 6.0

  • null -ehtolausekkeet. Lisätty uusia operaattoreita: ?.ja ?[]:
int? pituus = asiakkaat ?. Pituus ; // null jos asiakkaat on null Asiakas ensin = asiakkaat ?[ 0 ]; // null, jos asiakkaat ovat null
  • Funktiot, jotka on pakattu lausekkeiksi ( lausekepohjaiset funktiot ). Nyt menetelmän määritelmä voidaan antaa lambda-syntaksilla:
public Point Move ( int dx , int dy ) => new Point ( x + dx , y + dy );
  • Automaattisten ominaisuuksien alustajat. Automaattiset ominaisuudet voidaan nyt alustaa ilmoituksella:
public string Ensimmäinen { get ; asettaa ; } = "Jane" ;
  • Automaattiset ominaisuudet vain luku -tilassa. Automaattiset ominaisuudet voidaan nyt ilmoittaa ilman asettimia:
public string Ensimmäinen { get ; } = "Jane" ;
  • Indeksin alustajat. Nyt voit alustaa objektien ja kokoelmien lisäksi myös sanakirjoja:
var numbers = new Sanakirja < int , merkkijono > { [7] = "seitsemän" , [9] = "yhdeksän" , [13] = "kolmetoista" };
  • Merkkijonojen interpolointi . Sen sijaan, että käyttäisit rakenteita String.Format()esimerkiksi kanssa:
var s = Merkkijono . Muoto ( "{0} on {1} vuotta{{s}} vanha" , s . Nimi , p . Ikä );

nyt voit sijoittaa koodin suoraan riville:

var s = $"{p.Name} on {p.Age} vuotta{{s}} vanha" ;
  • Poikkeussuodattimet. Nyt voit asettaa ehtoja lohkoille catch:
yritä { } catch ( Poikkeus e ) kun ( Loki ( e )) { }
  • Staattisen tyyppisten funktioiden tuonti. Nyt pääsy tyyppien staattisiin jäseniin on mahdollista ilman näiden jäsenten koko nimeä:
käyttämällä staattista järjestelmää . konsoli ; käyttämällä staattista järjestelmää . matematiikka ; class Ohjelma { static void Main () { WriteLine ( Sqrt ( 3 * 3 + 4 * 4 )); } }
  • operaattori nameof. Uusi operaattori, joka palauttaa kompaktin merkkijonoesityksen argumenttina annetulle tyypille:
WriteLine ( nimi ( henkilö . Osoite . Postinumero )); // tulostaa "Postinumero"
  • Asynkroniseen ohjelmointiin on lisätty mahdollisuus käyttää operaattoreita awaitlohkojen catchsisällä finally:
resurssi res = null ; try { res = await Resurssi . OpenAsync ( ... ); // Voit tehdä tämän. } catch ( ResourceException e ) { await Resource . LogAsync ( res , e ); // Nyt voit tehdä tämän… } vihdoin { if ( res != null ) await res . CloseAsync (); // … ja tämä. }

Versio 7.0

Uusia ominaisuuksia versiossa 7.0 [16]

  • out-muuttujat, joiden avulla voit ilmoittaa muuttujat välittömästi menetelmäkutsussa (lisäksi tällaisten muuttujien laajuus on ulompi lohko):
p . GetCoordinates ( out int x , out int y );
  • Kuvioiden yhteensopivuus. Esitetään mallin ( ) käsite pattern, joka on syntaktinen rakenne, jonka avulla voit tarkistaa muuttujan yhteensopivuuden tietyn muodon kanssa ja poimia siitä tietoa.
  • Mallit, joissa is( isvoidaan nyt käyttää paitsi tyypin, myös mallin kanssa - oikeana argumenttina)
  • Kuviot ja ilme switch. Käyttötapauksia switchon laajennettu, nyt voit:
    • käytä mitä tahansa tyyppiä (ei vain primitiivisiä);
    • käytä malleja ilmaisuissa case;
    • lisää lausekkeisiin lisäehtoja case(käyttäen avainsanaa when).
  • Tuples. Lisäarvon monikkotyyppi (struct ValueTuple) ja syntaksi tämän tyyppisten tietojen käsittelyyn:
( merkkijono , merkkijono , merkkijono ) LookupName ( long id ) // paluutyyppi on monikko { ... // alusta data return ( ensimmäinen , keskimmäinen , viimeinen ); // monikko literaali }
  • Tuplejen purkaminen . Uusi syntaksirakennelma , dekonstruktori , on lisätty luokan jäsenten noutamiseksi.
  • paikalliset toiminnot. Nyt vain metodin rungossa käytetty funktio voidaan ilmoittaa suoraan tämän metodin rungossa.
  • Kirjaimellisia parannuksia. Binääriliteraalit ja erotinmerkki ( _) numeerisissa literaaleissa on lisätty .
  • Paikalliset muuttujat ja palauttavat arvot viitteellä. Avainsanan toiminnallisuutta on laajennettu ref. Nyt voit palauttaa tiedot menetelmästä tai tallentaa sen paikalliseen muuttujaan viittauksella.
  • Asynkronisilla menetelmillä palautettujen tyyppien luettelon laajentaminen
  • Lisää luokan jäseniä ilmauksina. Lausekkeisiin tiivistetty funktiosyntaksi ( expression-bodied functions) koskee nyt asettajia, gettereitä, rakentajia ja destruktoreita.
  • throw-ilmaisuja. Voidaan nyt käyttää throwlausekkeisiin tiivistetyissä funktioissa ( expression-bodied functions):
julkinen merkkijono GetLastName () => heittää uusi NotImplementedException ();


Versio 8.0

Uusia ominaisuuksia versiossa 8.0 [20]

  • Muokkaus readonly. Luotiin merkitsemään jäsentä, joka ei muuta tilaa.
  • Liitäntämenetelmät oletuksena. Nyt kun luot käyttöliittymämenetelmän, voit ilmoittaa sen oletustoteutuksen, joka voidaan ohittaa luokassa, joka toteuttaa tämän rajapinnan.
  • Kuvioiden yhteensopivuus. Ominaisuuden avulla voit työskennellä mallien kanssa muodosta riippuen liittyvissä mutta erilaisissa tietotyypeissä.
    • rekursiiviset kuviot. On mallilauseke, jota käytetään toisen mallilausekkeen tuloksiin.
    • Switch-lauseiden avulla voit vähentää tapausten ja taukojen määrää sekä kiharaa aaltosulkeiden määrää.julkinen enum sateenkaari { punainen , oranssi , keltainen , vihreä , sininen , indigo , violetti } public static RGBColor FromRainbow ( Rainbow colorBand ) => colorBand kytkin { Rainbow . Punainen = > uusi RGBColor ( 0xFF , 0x00 , 0x00 ) , Rainbow . _ Oranssi = > uusi RGBColor ( 0xFF , 0x7F , 0x00 ) , Rainbow . _ Keltainen => uusi RGBColor ( 0 xFF , 0 xFF , 0 x00 ), Rainbow . Vihreä = > uusi RGBColor ( 0x00 , 0xFF , 0x00 ) , Rainbow . _ Sininen = > uusi RGBColor ( 0x00 , 0x00 , 0xFF ) , Rainbow . _ Indigo => uusi RGBColor ( 0 x4B , 0 x00 , 0 x82 ), Rainbow . Violetti => uusi RGBColor ( 0 x94 , 0 x00 , 0 xD3 ), _ => heittää uusi ArgumentException ( viesti : "invalid enum value" , ​​​​paramName : nameof ( colorBand )), };
    • Kiinteistömallit. Voit verrata tutkittavan kohteen ominaisuuksia käyttämällä { variable : value } => ....
    • Tuple mallit. Käytetään, kun sinun on työskenneltävä useiden tulojen kanssa.(value1, value2,..) => ...
  • Ilmoitus using. Tämä on muuttujan ilmoitus, jota edeltää avainsana using. Se kertoo kääntäjälle, että ilmoitettu muuttuja tulee poistaa laajuuden lopussa .
  • Staattinen paikallinen menetelmä. Nyt voit varmistaa, että menetelmä ei kata mitään muuttujia soveltamisalasta lisäämällä siihen modifierin static.
  • Viiterakenteet poistettava. Viiterakenteet eivät voi toteuttaa IDisposable(kuten muitakaan rajapintoja). Siksi ref structtarvitset saatavilla olevan void Dispose().
  • Arvotyypit, jotka hyväksyvät arvon null. Nyt jos haluat osoittaa, että arvotyyppimuuttuja hyväksyy arvon null, sinun on liitettävä tyypin nimen eteen?
  • asynkroniset säikeet. Ensinnäkin se on käyttöliittymä IAsyncEnumerable<T>. Ja toiseksi rakentaminen foreach.awaitjulkinen staattinen asynkronointijärjestelmä . _ kokoelmat . Yleinen . IAsyncEnumerable < int > GenerateSequence () { for ( int i = 0 ; i < 20 ; i ++) { odota tehtävää . viive ( 100 ); tuottotuotto i ; _ } } // tai odota foreach ( var number in GenerateSequence ()) { Konsoli . WriteLine ( numero ); }
  • Asynkroniset vapautustyypit. C# 8.0:sta alkaen kieli tukee asynkronisia vapautettuja tyyppejä, jotka toteuttavat System.IAsyncDisposable. Lausekkeen operandi usingvoi toteuttaa IDisposabletai IAsyncDisposable. Siinä tapauksessa IAsyncDisposablekääntäjä luo koodin awaitpalautetulle tiedostolle Task.IAsyncDisposable.DisposeAsync
  • Indeksit ja vaihteluvälit. Alueet ja indeksit tarjoavat tiiviin syntaksin yksittäisten elementtien tai alueiden käyttämiseksi järjestyksessä. Innovaatio sisältää operaattorit ^ja .., sekä System.IndexjaSystem.Range
  • null ammattiliiton määritysoperaattori. Operaattoria ??=voidaan käyttää oikean operandin arvon määrittämiseen vasemmalle operandille vain, jos vasen operandi arvioi arvoon null.Lista < int > numerot = null ; int? i = nolla ; numerot ??= uusi Lista < int >(); numerot . Lisää ( i ??= 17 ); numerot . Lisää ( i = 20 ); konsoli . WriteLine ( merkkijono . Liity ( " " , numerot )); // lähtö: 17 17 Konsoli . WriteLine ( i ); // lähtö: 17
  • Hallitsemattomat rakennetut tyypit. Alkaen C# 8.0:sta konstruoitu arvotyyppi on hallitsematon, jos se sisältää yksinomaan hallitsemattomien tyyppien kenttiä (esimerkiksi yleinen tyyppi <T>).
  • Stackalloc-lauseke sisäkkäisissä lausekkeissa. Jos nyt stackalloc-lausekkeen tulos on tyyppiä System.Span<T>tai System.ReadOnlySpan<T>, sitä voidaan käyttää muissa lausekkeissa.Span < int > numerot = pinoalloc [] { 1 , 2 , 3 , 4 , 5 , 6 }; var ind = numerot . IndexOfAny ( pinokalloc [] { 2 , 4 , 6 , 8 }); konsoli . WriteLine ( ind ); // lähtö: 1
  • Merkkien $ja @interpoloitujen sanamerkkijonojen järjestys voi nyt olla mikä tahansa.


Esimerkki "Hei maailma!"

Alla on koodi klassiselle Hello world -ohjelmalle C#:ssa konsolisovellukselle:

konsoli . WriteLine ( "Hei maailma!" ); // Tulostaa annettu teksti konsoliin konsoli . ReadKey (); // Odota, että käyttäjä painaa näppäintä

ja saman ohjelman koodi Windows Forms -sovellukselle:

nimiavaruus WindowsForms ; julkisen luokan ohjelma { [STATthread] public static void Main () => uusi esittelylomake (). ShowDialog (); } julkinen luokka DemoForm : Lomake { Label label = uusi etiketti (); julkinen esittelylomake () { etiketti . Teksti = "Hei maailma!" ; tämä . Säätimet . Lisää ( etiketti ); tämä . Aloitussijainti = FormStartPosition . CenterScreen ; tämä . BackColor = Väri . valkoinen ; tämä . FormBorderStyle = FormBorderStyle . Fixed3D ; } }

Toteutukset

C#-toteutuksia on useita:

Muistiinpanot

  1. "Koska C#-kieli peri syntaksinsa C++:sta ja Javasta..." Trey Nash. C # 2010: nopeutettu kurssi ammattilaisille = Accelerated C # 2010. - M . : Williams, 2010. - P.  17 . — 592 s. — ISBN 978-5-8459-1638-9 .
  2. "C#-kieli <...> on perinyt monia hyödyllisiä ominaisuuksia muista ohjelmointikielistä ja se liittyy suoraan kahteen maailman eniten käytettyyn tietokonekieleen - C ja C ++, sekä Java-kieli" , mutta edelleen: "C #:n ja Javan välinen yhteys on monimutkaisempi. Molemmat kielet on suunniteltu luomaan kannettavaa koodia C- ja C++-pohjaisten syntaksien ja objektimallien avulla. Näiden kielten välillä ei kuitenkaan ole suoraa yhteyttä, ne ovat enemmän kuin serkkuja, joilla on yhteiset esi-isät, mutta eroavat monin tavoin." Herbert Schildt . C# opetusohjelma = C#. Aloittelijan opas. - M .: Piter , 2003. - S. 20. - ISBN 966-552-121-7 .
  3. Herbert Schildt . The Complete Reference for C# = C#: The Complete Reference. - M . : Kustantaja "Williams", 2004. - S.  26 -27. — 752 s. — ISBN 5-8459-0563-X .
  4. Lisenssi (Roslyn) Githubin arkistossa . Haettu 4. tammikuuta 2022. Arkistoitu alkuperäisestä 4. tammikuuta 2022.
  5. Lisenssi (.NET CLR) Githubin arkistossa . Haettu 4. tammikuuta 2022. Arkistoitu alkuperäisestä 4. tammikuuta 2022.
  6. Liberty D. C# -ohjelmointikieli // C# -ohjelmointi . - Pietari. - 2003: Symbol-Plus, 2003. - S.  26 . — 688 s. — ISBN 5-93286-038-3 .
  7. Kovacs, James C#/.NET History Lesson  ( 7. syyskuuta 2007). Haettu 23. maaliskuuta 2011. Arkistoitu alkuperäisestä 21. elokuuta 2011.
  8. Ohjelmointikielten AZ: C#  (englanti)  (linkkiä ei ole saatavilla) . computerworld.com.au (1. lokakuuta 2008). Haettu 2. syyskuuta 2014. Arkistoitu alkuperäisestä 2. huhtikuuta 2015.
  9. Microsoft C# FAQ (downlink) . Microsoft . Haettu 25. maaliskuuta 2008. Arkistoitu alkuperäisestä 30. huhtikuuta 2003. 
  10. C#-kielimääritykset  (epämääräinen) . – 4. - Ecma International , 2006. Arkistoitu kopio (linkkiä ei ole saatavilla) . Käyttöpäivä: 26. tammikuuta 2011. Arkistoitu alkuperäisestä 2. joulukuuta 2012. 
  11. Visual C# .net -standardi (JPEG). Microsoft (4. syyskuuta 2003). Haettu 18. kesäkuuta 2009. Arkistoitu alkuperäisestä 21. elokuuta 2011.
  12. Standardi ECMA-334 C# Language Specification, 4.  painos . Ecma International (kesäkuu 2006). Haettu 16. toukokuuta 2017. Arkistoitu alkuperäisestä 31. lokakuuta 2010.
  13. ISO/IEC 23270:2003 Tietotekniikka – C#  -kielimääritykset . Kansainvälinen standardointijärjestö (huhtikuu 2003). Haettu 16. toukokuuta 2017. Arkistoitu alkuperäisestä 5. elokuuta 2017.
  14. Microsoft C# 2.0:n tekniset tiedot sisältävät kuvauksen vain version 2.0 uusista ominaisuuksista. Versiotiedot on kuvattu yllä olevassa 1.2-spesifikaatiossa.
  15. C#-kieliversioilla 3.0, 4.0 ja 5.0 ei vielä ole ECMA- tai ISO/IEC-hyväksyttyjä määrityksiä.
  16. 12 Mads Torgersen . Uudet ominaisuudet C# 7.0 :ssa . .NET-blogi . Microsoft (9. maaliskuuta 2017). Haettu 7. toukokuuta 2017. Arkistoitu alkuperäisestä 11. huhtikuuta 2017.  
  17. Erot C++-mallien ja C#-yleisten ohjelmien välillä (C#-ohjelmointiopas  ) . Microsoft (17. joulukuuta 2016). Haettu 16. toukokuuta 2017. Arkistoitu alkuperäisestä 7. elokuuta 2021.
  18. Anders Hejlsberg - Tietojen ohjelmointi C#  3.0 :ssa . Kanava 9 -tiimi . Microsoft (16. kesäkuuta 2004). Haettu 16. toukokuuta 2017. Arkistoitu alkuperäisestä 12. marraskuuta 2018.
  19. Visual Studio 2010: Esimerkkejä C# 4.0:lle . Microsoft (17. heinäkuuta 2012). Haettu 16. toukokuuta 2017. Arkistoitu alkuperäisestä 28. helmikuuta 2017.
  20. Uusia ominaisuuksia C# 8.0:ssa . docs.microsoft.com. Haettu 11. kesäkuuta 2020. Arkistoitu alkuperäisestä 8. elokuuta 2020.
  21. Dot Net Anywhere . Haettu 5. maaliskuuta 2009. Arkistoitu alkuperäisestä 4. toukokuuta 2009.

Kirjallisuus

  • John Skeet. C# ammattilaisille: ohjelmoinnin hienouksia, 3. painos, uusi käännös = C# in Depth, 3. painos.. - M . : "Williams" , 2014. - 608 s. - ISBN 978-5-8459-1909-0 .
  • Christian Nagel ym. C# 5.0 ja .NET 4.5 ammattilaisille = Professional C# 5.0 ja .NET 4.5. - M . : "Dialektiikka" , 2013. - 1440 s. - ISBN 978-5-8459-1850-5 .
  • A. Hejlsberg, M. Torgersen, S. Wiltamuth, P. Gold. C# ohjelmointikieli. Klassinen tietojenkäsittelytiede. 4. painos = C#-ohjelmointikieli (kattaa C# 4.0:n), 4. painos. - Pietari. : "Peter" , 2012. - 784 s. - ISBN 978-5-459-00283-6 . Arkistoitu 10. lokakuuta 2011 Wayback Machinessa
  • E. Stillman, J. Green. C#:n oppiminen. 2. painos = Head First C#, 2ed. - Pietari. : "Piter" , 2012. - 704 s. - ISBN 978-5-4461-0105-4 .  (linkki ei saatavilla)
  • Andrew Troelsen. C# 5.0 ja .NET 4.5 Framework, 6. painos = Pro C# 5.0 ja .NET 4.5 Framework, 6. painos. - M . : "Williams" , 2013. - 1312 s. — ISBN 978-5-8459-1814-7 .
  • Joseph Albahari, Ben Albahari. C# 6.0. Hakemisto. Koko kielikuvaus = C# 6.0 pähkinänkuoressa: Lopullinen viite. - M. : "Williams" , 2018. - 1040 s. - ISBN 978-5-8459-2087-4 . — ISBN 978-1-491-92706-9 .
  • Herbert Schildt. C# 4.0: The Complete Reference = C# 4.0 The Complete Reference. - M .: "Williams" , 2010. - S. 1056. - ISBN 978-5-8459-1684-6 .
  • Christian Nagel, Carly Watson ym. Visual C # 2010: koko kurssi = Beginning Microsoft Visual C # 2010. - M . : Dialectics , 2010. - ISBN 978-5-8459-1699-0 .

Linkit