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 |
Cω , Spec# , Polyfoninen C# , Enhanced C# |
Vaikutettu |
C++ , Java [1] [2] [3] , Delphi , Modula-3 ja Smalltalk |
vaikutti |
Cω , 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 C → C++ → 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:
Yleistä tietoa versioista
Versio |
Innovaatiot
|
C# 2.0
|
- 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
|
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
- Osittaiset tyypit (luokkatoteutuksen erottaminen useampaan kuin yhteen tiedostoon ).
- Yleiset tai parametroidut tyypit ( generics ). Toisin kuin C++-mallit , ne tukevat joitain lisäominaisuuksia ja toimivat virtuaalikoneen tasolla . Yleiset tyyppiparametrit eivät kuitenkaan voi olla lausekkeita, ne eivät voi olla kokonaan tai osittain erikoistuneita, ne eivät tue malliparametreja oletuksena, niitä ei voi periä malliparametreista jne. [17]
- Uusi iteraattorimuoto , jonka avulla voit luoda korutiinia avainsanalla yield, joka on samanlainen kuin Python ja Ruby .
- Anonyymit menetelmät, jotka tarjoavat sulkemistoiminnon .
- Nollaliitosoperaattori : ' ?? ': return obj1 ?? obj2;tarkoittaa (C# 1.0 -merkinnällä) return obj1!=null ? obj1 : obj2;.
- Nollattavat tyypit ovat arvoja ( merkitty kysymysmerkillä, kuten int? i = null;), jotka ovat samoja arvotyyppejä, jotka voivat myös ottaa arvon null. Tällaiset tyypit mahdollistavat paremman vuorovaikutuksen tietokantojen kanssa SQL -kielen kautta .
- Mahdollisuus luoda tallennettuja proseduureja , laukaisimia ja jopa tietotyyppejä .Net-kielillä (mukaan lukien C#).
- Tuki 64-bittisille laskutoimituksille, jonka avulla voit muun muassa lisätä osoiteavaruutta ja käyttää 64-bittisiä primitiivisiä tietotyyppejä .
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:
- avainsanat select, from, where, jotka mahdollistavat kyselyjen tekemisen XML - asiakirjoista, kokoelmista jne. Nämä kyselyt ovat samanlaisia kuin SQL -kyselyt, ja ne toteutetaan LINQ - komponentilla . (Laus "kielellä integroitu kysely" itsessään tarkoittaa "kielellä integroitua kyselyä".)
- Objektin alustus ominaisuuksineen:
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 );
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
- ↑ "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 .
- ↑ "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 .
- ↑ 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 .
- ↑ Lisenssi (Roslyn) Githubin arkistossa . Haettu 4. tammikuuta 2022. Arkistoitu alkuperäisestä 4. tammikuuta 2022. (määrätön)
- ↑ Lisenssi (.NET CLR) Githubin arkistossa . Haettu 4. tammikuuta 2022. Arkistoitu alkuperäisestä 4. tammikuuta 2022. (määrätön)
- ↑ Liberty D. C# -ohjelmointikieli // C# -ohjelmointi . - Pietari. - 2003: Symbol-Plus, 2003. - S. 26 . — 688 s. — ISBN 5-93286-038-3 .
- ↑ Kovacs, James C#/.NET History Lesson ( 7. syyskuuta 2007). Haettu 23. maaliskuuta 2011. Arkistoitu alkuperäisestä 21. elokuuta 2011.
- ↑ Ohjelmointikielten AZ: C# (englanti) (linkkiä ei ole saatavilla) . computerworld.com.au (1. lokakuuta 2008). Haettu 2. syyskuuta 2014. Arkistoitu alkuperäisestä 2. huhtikuuta 2015.
- ↑ Microsoft C# FAQ (downlink) . Microsoft . Haettu 25. maaliskuuta 2008. Arkistoitu alkuperäisestä 30. huhtikuuta 2003. (määrätön)
- ↑ 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. (määrätön)
- ↑ Visual C# .net -standardi (JPEG). Microsoft (4. syyskuuta 2003). Haettu 18. kesäkuuta 2009. Arkistoitu alkuperäisestä 21. elokuuta 2011. (määrätön)
- ↑ Standardi ECMA-334 C# Language Specification, 4. painos . Ecma International (kesäkuu 2006). Haettu 16. toukokuuta 2017. Arkistoitu alkuperäisestä 31. lokakuuta 2010.
- ↑ ISO/IEC 23270:2003 Tietotekniikka – C# -kielimääritykset . Kansainvälinen standardointijärjestö (huhtikuu 2003). Haettu 16. toukokuuta 2017. Arkistoitu alkuperäisestä 5. elokuuta 2017.
- ↑ 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.
- ↑ C#-kieliversioilla 3.0, 4.0 ja 5.0 ei vielä ole ECMA- tai ISO/IEC-hyväksyttyjä määrityksiä.
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ Visual Studio 2010: Esimerkkejä C# 4.0:lle . Microsoft (17. heinäkuuta 2012). Haettu 16. toukokuuta 2017. Arkistoitu alkuperäisestä 28. helmikuuta 2017. (määrätön)
- ↑ Uusia ominaisuuksia C# 8.0:ssa . docs.microsoft.com. Haettu 11. kesäkuuta 2020. Arkistoitu alkuperäisestä 8. elokuuta 2020. (Venäjän kieli)
- ↑ Dot Net Anywhere . Haettu 5. maaliskuuta 2009. Arkistoitu alkuperäisestä 4. toukokuuta 2009. (määrätön)
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
Bibliografisissa luetteloissa |
|
---|
C# |
---|
Versiot |
|
---|
PÄÄLLÄ |
|
---|
Liittyvät |
|
---|
ISO- standardit |
---|
- Luokat: Luokka:ISO-standardit
- Luokka:OSI-protokollat
|
1-9999 _ _ |
|
---|
10 000 - 19999 |
|
---|
20 000+ |
|
---|
Katso myös: Luettelo artikkeleista, joiden otsikot alkavat sanalla "ISO" |
C-ohjelmointikieli |
---|
|
Kääntäjät |
|
---|
Kirjastot |
|
---|
Erikoisuudet |
|
---|
Jotkut jälkeläiset |
|
---|
C ja muut kielet |
|
---|
Luokka: C-ohjelmointikieli |
Microsoft Research (MSR) |
---|
Pääprojektit _ | |
---|
MSR Labs | Labs | Todellinen |
|
---|
lopetettu |
- Deepfish
- listat
- Live-leikepöytä
- fotosynth
- Volta
|
---|
|
---|
Labs |
|
---|
Muut divisioonat |
|
---|
|
---|
Kategoria |
Ilmainen ja avoimen lähdekoodin Microsoft- ohjelmisto |
---|
yleistä tietoa |
|
---|
Ohjelmisto_ _ | Sovellukset |
|
---|
Pelit |
|
---|
Ohjelmointikielet _ |
|
---|
Kehykset ja kehitystyökalut |
|
---|
Käyttöjärjestelmät _ |
|
---|
muu |
|
---|
|
---|
Lisenssit |
|
---|
liittyvät aiheet |
- .NET Foundation
- F-Sharp Software Foundation
- Microsoft Open Specification Promise
- Outercurve Foundation
|
---|
Kategoria |