C Sharp
Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. június 7-én felülvizsgált
verziótól ; az ellenőrzések 59 szerkesztést igényelnek .
TÓL TŐL# |
---|
|
Nyelvóra |
több paradigma :
objektumorientált ,
általános ,
procedurális ,
funkcionális ,
eseményalapú ,
fényvisszaverő |
Megjelent |
2001 |
Szerző |
Anders Hejlsberg |
Fejlesztő |
.NET Alapítvány |
Fájlkiterjesztés _ |
.csvagy.csx |
Kiadás |
10.0 ( 2021. november 8. ) |
Teszt verzió |
11. ( 2022. február 22. ) |
Típusrendszer |
statikus , dinamikus , szigorú , biztonságos , típuskövetkeztetés |
Főbb megvalósítások |
.NET Framework , Mono , .NET , DotGNU (fagyasztott) , Univerzális Windows platform |
Dialektusok |
Cω , Spec# , Polifonikus C# , Továbbfejlesztett C# |
Befolyásolva |
C++ , Java [1] [2] [3] , Delphi , Modula-3 és Smalltalk |
befolyásolta |
Cω , F# , Nemerle , Vala , Windows PowerShell , Kotlin |
Engedély |
Roslyn fordító : MIT licenc [4]
.NET Core CLR : MIT licenc [5]
Mono fordító : kettős GPLv3 és MIT/X11
DotGNU : kettős GPL és LGPL |
Weboldal |
docs.microsoft.com/en-us… |
Felület |
Közös nyelvi infrastruktúra |
Médiafájlok a Wikimedia Commons oldalon |
A C# (ejtsd: c sharp ) egy általános célú objektum-orientált programozási nyelv . 1998 és 2001 között fejlesztette ki a Microsoft mérnökeinek egy csoportja, Anders Hejlsberg és Scott Wilthaumot [6] vezetésével a Microsoft .NET Framework és .NET Core platformok alkalmazásfejlesztési nyelveként . Ezt követően az ECMA -334 és az ISO / IEC 23270 szabvány szerint lett szabványosítva .
A C# a C-szerű szintaxisú nyelvek családjába tartozik , amelyek közül szintaxisa a legközelebb áll a C++- hoz és a Java -hoz . A nyelv statikusan van beírva , támogatja a polimorfizmust , az operátorok túlterhelését (beleértve az explicit és implicit cast operátorokat), delegátusokat , attribútumokat, eseményeket , változókat , tulajdonságokat , általános típusokat és metódusokat, iterátorokat , névtelen függvényeket bezárási támogatással , LINQ - t , kivételeket , XML - beli megjegyzéseket formátumban .
Miután sokat átvett elődeiből - a C++ , Delphi , Modula , Smalltalk és különösen a Java - C# nyelvekből, ezek használatának gyakorlatára támaszkodva kizár néhány olyan modellt, amelyek problémásnak bizonyultak a szoftverrendszerek fejlesztése során. Például a C#, ellentétben a C ++-val, nem támogatja az osztályok többszörös öröklését (eközben az interfészek többszörös megvalósítása megengedett ).
A nyelv jellemzői
A C#-t a CLR alkalmazásszintű programozási nyelveként tervezték, és mint ilyen, elsősorban magának a CLR-nek a képességeitől függ. Ez mindenekelőtt a C# típusú rendszerre vonatkozik, amely a BCL -t tükrözi . Bizonyos kifejező nyelvi jellemzők meglétét vagy hiányát az határozza meg, hogy egy adott nyelvi jellemző lefordítható-e a megfelelő CLR-konstrukciókba. Tehát a CLR 1.1-ről 2.0-ra való fejlesztésével maga a C # jelentősen gazdagodott; hasonló interakciókra kell számítani a jövőben (ez a minta azonban megszakadt a C # 3.0 kiadásával, amely egy olyan nyelvi kiterjesztés, amely nem támaszkodik a .NET platform kiterjesztéseire). A CLR, mint minden más .NET -orientált nyelv, számos olyan funkcióval rendelkezik, amelyek a "klasszikus" programozási nyelvekből hiányoznak. Például a szemétgyűjtést nem magában a C#-ban valósítják meg, hanem a CLR hajtja végre a C#-ban írt programok esetében, ugyanúgy, mint a VB.NET , J# stb.
nyelven írt programok esetében.
Nyelv neve
Az "éles" név (az angol éles - éles szóból) az alfabetikus zenei jelölésből származik , ahol a latin C betű a Do hangjegynek felel meg , az éles jel (angol éles) pedig a hangjegynek megfelelő hang hangjának növekedését jelenti . egy félhang [7] , amely hasonló a C++ nyelv nevéhez , ahol a "++" a változó növekményt jelöli . A név egyben láncjáték is C → C++ → C++++(C#), mivel a "#" szimbólum 4 "+" jelből állóként ábrázolható [8] .
A megjelenítés technikai korlátai (szabványos betűtípusok, böngészők stb.), valamint azért, mert az éles ♯ jel nem jelenik meg a szabványos számítógép-billentyűzeten , a font jel (#) használatos a programozási nyelv nevének írásakor. [9] . Ezt az egyezményt tükrözi az ECMA-334 C# nyelvi specifikáció [10] . A gyakorlatban azonban (például reklámozásnál és dobozos tervezésnél [11] ) a Microsoft az éles jelet használja.
A programozási nyelvek nevét nem szokás lefordítani, ezért a nyelvet átírással „C Sharp”-nak nevezik.
Szabványosítás
A C# szabványosított az ECMA (ECMA-334) [12] és az ISO (ISO/IEC 23270) [13] szabványokban .
Ezen a specifikáción alapuló C#-nak legalább három független megvalósítása létezik, amelyek jelenleg a fejlesztés különböző szakaszaiban vannak:
Verziók
A C# nyelv fejlesztése során több változata is megjelent:
Általános információk a verziókról
Változat |
Innovációk
|
C# 2.0
|
- Általános típusok ( generikus )
- Iterátorok és a kulcsszóyield
- Anonim módszerek
- null -union operátor
- Nullálható típusok
|
C# 3.0
|
- Nyelvi integrált lekérdezések ( LINQ )
- Objektum- és gyűjteményinicializálók
- Lambda kifejezések
- Kifejezési fák
- Implicit gépelés és a kulcsszóvar
- Névtelen típusok
- Kiterjesztési módszerek
- Automatikus tulajdonságok
|
C# 4.0
|
- Dinamikus linkelés és a kulcsszódynamic
- Megnevezett és nem kötelező argumentumok
- Általános kovariancia és kontravariancia
- TPL Library , Feladat koncepció és osztályok Task,Parallel
- OsztályMemoryCache
- Párhuzamos gyűjtési osztályok
|
C# 5.0
|
- TAP sablon
- aszinkron módszerek asyncésawait
- Hívó adatai
|
C# 6.0
|
- A fordító, mint szolgáltatás
- Statikus típusú tagok importálása névtérbe
- Kivételszűrők
- awaitblokkban catch/finally
- Autoproperty inicializálók
- Csak olvasható automatikus tulajdonságok
- null -feltételes műveletek ( ?.és ?[])
- String interpoláció
- Operátornameof
- Szótár inicializáló
- Kifejezésekre redukált függvények
|
C# 7.0 [16]
|
- out-változók
- Mintaillesztés
- Sablonokis
- Minták és kifejezésekswitch
- Tuples
- Sorok kicsomagolása (dekonstruktorok)
- Helyi funkciók
- Szó szerinti fejlesztések
- Helyi változók és visszatérési értékek hivatkozással
- Az aszinkron módszerekkel visszaadott típusok listájának bővítése
- Több osztálytag kifejezésként
- throwkifejezéseket
|
C# 8.0
|
- Csak olvasható tagok
- Alapértelmezett interfésztagok
- Mintaillesztési fejlesztések
- deklarációk segítségével
- Statikus lokális funkciók
- Kivehető referencia szerkezetek
- Nullálható referenciatípusok
- Aszinkron szálak
- Indexek és tartományok
- NULL szakszervezeti megbízás
- Nem menedzselt épített típusok
- Stackalloc kifejezések beágyazott kifejezésekben
- Több osztálytag kifejezésként
- Interpolált karakterlánc fejlesztések
|
C# 9.0
|
- null union operátor (??)
- Üres paraméterek a lambda-kifejezésekhez
- Natív Int: nint, nuint
- Hozzáadott with-kifejezések
|
C# 10.0
|
- role="alert"Üzenetattribútumok hozzáadása
- Hozzáadandó Counterkomponensfrissítésekrole="status"
- Az ul cseréje egy NavBaralkatrészben a számáranav
- Új váltógomb neveNavBar
- Lépjen a szemantikai jelölésre
|
1.0 verzió
A C# projekt 1998 decemberében indult, kódneve COOL (C-style Object Oriented Language). Az 1.0-s verziót 2000 júniusában jelentették be a .NET platformmal, ugyanabban az évben, mint az első nyilvános béta ; A C# 1.0 végül 2002 februárjában jelent meg a Microsoft Visual Studio .NET-tel .
A C# első verziója képességeiben hasonlított a Java 1.4-re, és némileg kibővítette azokat: például a C#-nak voltak tulajdonságai (amelyek objektummezőknek tűntek a kódban , de valójában osztálymetódusoknak nevezték őket), indexelők (hasonlóak a tulajdonságokhoz, de vették paraméter mint indextömb), események , delegáltak , hurkok , érték szerint átadott struktúrák , beépített típusok automatikus konvertálása objektummá, ha szükséges ( boxing ), attribútumok, beépített interakciós eszközök nem menedzselt kóddal ( DLL , COM ) és több.
foreach
Ezenkívül úgy döntöttek, hogy néhány olyan C++ szolgáltatást C#-ra portolnak, amelyek hiányoztak a Java-ban: előjel nélküli típusok, operátor túlterhelés (bizonyos megkötésekkel, a C++ -tól eltérően ), paraméterek átadása egy metódusnak hivatkozással , metódusok változó paraméterekkel, operátor (korlátozásokkal) . Ezenkívül a C#-ban korlátozott lehetőséget hagytak a mutatókkal való munkavégzésre - olyan kódhelyeken, amelyeket kifejezetten a szó jelez, és amikor speciális opciót adnak meg a fordítónak .
gotounsafe
2.0 verzió
A C# 2.0 specifikáció tervezetét először a Microsoft tette közzé 2003 októberében ; 2004 - ben megjelentek a béta kiadások (Whidbey kódnevű projekt), a C# 2.0 végül 2005. november 7-én jelent meg a Visual Studio 2005 -tel és a .NET 2.0-val együtt.
Új funkciók a 2.0-s verzióban
- Részleges típusok (egy osztálymegvalósítás szétválasztása több fájlra ).
- Általános vagy paraméterezett típusok ( generics ). A C++ sablonokkal ellentétben támogatnak néhány további funkciót, és virtuális gép szinten működnek . Az általános típusparaméterek azonban nem lehetnek kifejezések, nem lehetnek teljesen vagy részben specializáltak, alapértelmezés szerint nem támogatják a sablonparamétereket, nem örökölhetők sablonparaméterből stb. [17]
- Az iterátor új formája, amely lehetővé teszi a korutinok létrehozását kulcsszóval yield, hasonlóan a Pythonhoz és a Rubyhoz .
- Névtelen módszerek, amelyek lezárás funkciót biztosítanak .
- A null join operátor: '??': return obj1 ?? obj2;azt jelenti (C# 1.0 jelöléssel) return obj1!=null ? obj1 : obj2;.
- A nullázható típusok olyan értékek (kérdőjellel jelölve , például int? i = null;), amelyek ugyanazok az értéktípusok, amelyek szintén felvehetik az értéket null. Az ilyen típusok jobb interakciót tesznek lehetővé az adatbázisokkal az SQL nyelven keresztül .
- Lehetőség tárolt eljárások , triggerek és akár adattípusok létrehozására .Net nyelveken (beleértve a C#-t is).
- A 64 bites számítások támogatása, amely többek között lehetővé teszi a címterület növelését és a 64 bites primitív adattípusok használatát .
3.0-s verzió
2004 júniusában Anders Hejlsberg először beszélt a Microsoft webhelyén a C#3.0 nyelvi bővítményeiről [18] . 2005 szeptemberében megjelent a C# 3.0 specifikáció tervezete és a C# 3.0 béta verziója, amely a meglévő Visual Studio 2005 és .NET 2.0 kiegészítőjeként került telepítésre. A nyelv ezen verziója végül bekerült a Visual Studio 2008-ba és a .NET 3.5-be.
Új funkciók a 3.0-s verzióban
A C# 3.0 a következő radikális kiegészítéseket vezette be a nyelven:
- kulcsszavak select, from, where, amelyek lehetővé teszik XML -dokumentumokból, gyűjteményekből stb. lekérdezéseket. Ezek a lekérdezések hasonlóak az SQL -lekérdezésekhez, és a LINQ komponens valósítja meg őket . (A „nyelvi integrált lekérdezés” kifejezés maga a „nyelvbe integrált lekérdezés” kifejezést jelenti.)
- Egy objektum inicializálása tulajdonságaival együtt:
Ügyfél c = új Ügyfél (); c . Név = "James" ; c . Életkor = 30 év ;
úgy írható fel
Ügyfél c = új Ügyfél { Név = "James" , Életkor = 30 };
listOfFoo . Where ( delegate ( Foo x ) { return x . size > 10 ; });
most így írható
listOfFoo . ahol ( x => x . méret > 10 );
A lambda-kifejezések immár adatstruktúraként ábrázolhatók, amely futás közben bejárható, ezáltal lehetővé válik az erősen beírt C#-kifejezések más tartományokba (például SQL-kifejezések) való lefordítása.
- Implicit gépelés: A helyi változó típusainak megállapítása . Az implicit beírásnál a kulcsszó kerül felhasználásra az adattípusvar neve helyett . Ekkor a fordítás során a fordító maga következtet az adattípusra a hozzárendelt érték alapján var x = "hello";:string x = "hello";
- Névtelen típusok:var x = new { Name = "James" };
- Bővítési módszerek. Mostantól új metódusokat adhat hozzá a meglévő osztályokhoz. thisEgy statikus osztály statikus függvényének első paraméterében lévő kulcsszó használatával valósítva meg.
public static class StringExtensions
{
public static int ToInt32 ( this string val )
{
return Int32 . elemzi ( val );
}
}
// ...
string s = "10" ;
int x = s . ToInt32 ();
- Automatikus tulajdonságok: a fordító létrehoz egy privát ( privát ) mezőt és a megfelelő hozzáférést és mutátort az űrlap kódjához
public string Név { get ; magánkészlet ; _ }
A C# 3.0 kompatibilis a C# 2.0-val az MSIL által generált kódban; A nyelv fejlesztései pusztán szintaktikai jellegűek, és a fordítási szakaszban valósulnak meg. Például sok integrált LINQ-lekérdezés elvégezhető anonim delegátusokkal kombinálva predikátum metódusokkal olyan tárolókon, mint a List.FindAllés List.RemoveAll.
4.0-s verzió
A C# 4.0 előzetese 2008 végén jelent meg a Visual Studio 2010 CTP verziójával együtt.
A Visual Basic 10.0 és a C# 4.0 2010 áprilisában jelent meg, a Visual Studio 2010 megjelenése mellett.
Új funkciók a 4.0-s verzióban
[19]
- Késői kötés használatának képessége, használata:
- dinamikusan gépelt nyelvekkel ( Python , Ruby )
- COM objektumokkal
- visszaverődés
- változó szerkezetű objektumok (DOM). Megjelenik a kulcsszó dynamic.
- Elnevezett és választható paraméterek
- A COM interop újdonságai
- Az általános interfészek és delegáltak kovarianciája és kontravarianciája
- Kódszerződések _
- TPL Task Parallel Library , Feladat koncepció és osztályok Task, TaskFactory,Parallel
- Hozzáadott egy osztályt MemoryCache, amelyet a tartalom gyorsítótárazására terveztek. Hasonló az CacheASP.NET osztályhoz, de használható webes/grafikai/ konzolalkalmazások írásakor .
- Hozzáadtuk a System.Collections.Concurrent névteret és az új párhuzamos gyűjtési osztályokat ( ConcurrentQueue , ConcurrentStack , ConcurrentBag ,…), amelyek nemcsak nagyobb hatékonyságot, hanem teljesebb szálbiztonságot is nyújtanak.
Példák:
dynamic calc = GetCalculator ();
intsum = számítás _ _ Add ( 10 , 20 ); // Dinamikus hívás
public void SomeMethod ( int x , int y = 5 , int z = 7 ); // Nem kötelező paraméterek
5.0 verzió
Új funkciók az 5.0-s verzióban
- TAP (Task-based Asynchronous Pattern). A TAP egy módszert használ az aszinkron művelet inicializálásának és befejezésének ábrázolására.
- Aszinkron módszerek ( asyncés await) - a TAP minta megvalósításaként.
- Hívó adatai
6.0 verzió
Új funkciók a 6.0-s verzióban
- null -feltételes utasítások. Új operátorok hozzáadva: ?.és ?[]:
int? hossz = vásárlók ?. Hosszúság ; // null if customers is null
Ügyfél első = ügyfelek ?[ 0 ]; // null, ha az ügyfelek nulla
- Kifejezésekké tömörített függvények ( kifejezés-törzs függvények ). Most a metódus definíciója megadható a lambda szintaxis használatával:
public Point Move ( int dx , int dy ) => new Point ( x + dx , y + dy );
- Autoproperty inicializálók. Az automatikus tulajdonságok mostantól inicializálhatók a deklaráción:
public string First { get ; készlet ; } = "Jane" ;
- Csak olvasható automatikus tulajdonságok. Az automatikus tulajdonságok mostantól beállítók nélkül deklarálhatók:
public string First { get ; } = "Jane" ;
- Index inicializálók. Most már nemcsak az objektumokat és gyűjteményeket inicializálhatja, hanem a szótárakat is:
var numbers = new Szótár < int , string > {
[7] = "hét" ,
[9] = "kilenc" ,
[13] = "tizenhárom"
};
- String interpoláció . Ahelyett, hogy konstrukciókat használna String.Format(), például:
var s = String . Formátum ( "{0} {1} éves {{s}} éves" , p . Név , p . Életkor );
most közvetlenül a sorba helyezheti a kódot:
var s = $"{p.Name} {p.Age} éves{{s}} éves" ;
- Kivételszűrők. Most beállíthatja a blokkok feltételeit catch:
próbálkozzon { … } catch ( Kivétel e ) when ( Napló ( e )) { … }
- Statikus típusú függvények importálása. Mostantól elérhető a statikus tagok típusai anélkül, hogy megadnánk a tagok teljes nevét:
statikus rendszer használatával . konzol ;
statikus rendszer használatával . matematika ; class Program { static void Main () { WriteLine ( Sqrt ( 3 * 3 + 4 * 4 )); } }
- operátor nameof. Egy új operátor, amely egy kompakt karakterlánc-reprezentációt ad vissza az argumentumként átadott típushoz:
WriteLine ( neve ( személy . Cím . Irányítószám )); // kiírja az "Irányítószámot"
- Az aszinkron programozáshoz az operátorok awaitblokkon belüli használatának lehetősége, catchés hozzáadásra került finally:
erőforrás res = null ;
try
{
res = await Erőforrás . OpenAsync ( ... ); // Megtehetnéd.
}
catch ( ResourceException e )
{
await Resource . LogAsync ( res , e ); // Most ezt megteheti…
}
végül
{
if ( res != null ) await res . CloseAsync (); // … és ez.
}
7.0 verzió
Új funkciók a 7.0-s verzióban [16]
- out-változók, amelyek lehetővé teszik a változók azonnali deklarálását egy metódushívásban (sőt, az ilyen változók hatóköre a külső blokk):
o . GetCoordinates ( out int x , out int y );
- Minta illesztés. Bemutatjuk a sablon ( ) fogalmát pattern, amely egy szintaktikai konstrukció, amely lehetővé teszi egy változó egy bizonyos formának való megfelelőségének ellenőrzését, és abból információk kinyerését.
- Sablonok a is( isimmár nem csak típussal, hanem sablonnal is használható - megfelelő argumentumként)
- Minták és kifejezések switch. A felhasználási esetek switchkibővültek, most a következőket teheti:
- bármilyen típust használjon (nem csak primitíveket);
- mintákat használjon kifejezésekben case;
- adjon hozzá további feltételeket a kifejezésekhez case(a kulcsszó használatával when).
- Tuples. Hozzáadott érték sortípus (struct ValueTuple) és szintaxis az ilyen típusú adatokkal való munkavégzéshez:
( string , string , string ) LookupName ( long id ) // a visszatérési típus egy sor
{
... // adat inicializálása
return ( first , middle , last ); // literal sor
}
- Tuples kicsomagolása . Egy új szintaktikai konstrukció , a deconstructor került hozzáadásra az osztálytagok sorának lekéréséhez.
- helyi funkciókat. Mostantól egy függvény, amelyet csak egy metódus törzsében használunk, közvetlenül a metódus törzsében deklarálható.
- Szó szerinti fejlesztések. A bináris literálok és a határoló karakter ( ) hozzáadásra került _a numerikus literálokban .
- Helyi változók és visszatérési értékek hivatkozással. A kulcsszó funkcionalitása kibővült ref. Most visszaadhatja a metódus adatait, vagy hivatkozással tárolhatja azokat egy helyi változóban.
- Az aszinkron módszerekkel visszaadott típusok listájának bővítése
- Több osztálytag kifejezésként. A ( ) kifejezésekhez sűrített függvényszintaxis expression-bodied functionsmostantól a setterekre, getterekre, konstruktorokra és destruktorokra vonatkozik.
- throw-kifejezések. Mostantól használható throwkifejezésekké tömörített függvényekben ( expression-bodied functions):
public string GetLastName () => dobj új NotImplementedException ();
8.0-s verzió
Új funkciók a 8.0-s verzióban [20]
- Módosító readonly. Egy olyan tag jelölésére jött létre, amelynek állapota nem változik meg.
- Alapértelmezés szerint az interfész metódusai. Most, amikor létrehoz egy interfész metódust, deklarálhatja annak alapértelmezett megvalósítását, amely felülbírálható abban az osztályban, amely ezt a felületet megvalósítja.
- Minta illesztés. A funkció lehetővé teszi, hogy sablonokkal dolgozzon a formátumtól függően a kapcsolódó, de eltérő adattípusokban.
- rekurzív minták. Sablonkifejezés, amelyet egy másik sablonkifejezés eredményeire alkalmazunk.
- A Switch utasítások lehetővé teszik az esetek és a szünetek, valamint a göndör kapcsos zárójelek számának csökkentését.public enum Rainbow
{
Piros ,
Narancs ,
Sárga ,
Zöld ,
Kék ,
Indigó ,
Ibolya
}
public static RGBColor FromRainbow ( Rainbow colorBand ) =>
colorBand switch
{
Rainbow . Piros = > új RGBColor ( 0xFF , 0x00 , 0x00 ) , Szivárvány . _ Narancs = > új RGBColor ( 0xFF , 0x7F , 0x00 ) , Szivárvány . _ Sárga => új RGBColor ( 0 xFF , 0 xFF , 0 x00 ), Szivárvány . Zöld = > új RGBColor ( 0x00 , 0xFF , 0x00 ) , Szivárvány . _ Kék = > új RGBColor ( 0x00 , 0x00 , 0xFF ) , Szivárvány . _ Indigo = > új RGBColor ( 0x4B , 0x00 , 0x82 ) , Rainbow . _ Violet => new RGBColor ( 0 x94 , 0 x00 , 0 xD3 ), _ => dob új ArgumentException ( üzenet : "invalid enum value" , paramName : nameof ( colorBand )), };
- Tulajdonsablonok. Lehetővé teszi a vizsgált objektum tulajdonságainak összehasonlítását a segítségével { variable : value } => ....
- Tuple sablonok. Akkor használatos, ha több bemenettel kell dolgozni.(value1, value2,..) => ...
- Közlemény using. Ez egy változódeklaráció, amelyet a kulcsszó előz meg using. Azt mondja a fordítónak, hogy a deklarált változót el kell távolítani a hatókör végén .
- Statikus lokális módszer. Most megbizonyosodhat arról, hogy a metódus nem terjed ki egyetlen változóra sem a hatókörből, ha hozzáadja a módosítót static.
- Eltávolítandó referenciastruktúrák. A referenciastruktúrák nem valósíthatók meg IDisposable(csakúgy, mint bármely más interfész). Ezért az eltávolításhoz ref structegy elérhető void Dispose().
- Értéket elfogadó értéktípusok null. Most annak jelzéséhez, hogy egy értéktípus-változó elfogad értéket null, a típusnév elé kell fűznie a következőt?
- aszinkron szálak. Először is, ez egy interfész IAsyncEnumerable<T>. Másodszor pedig a konstrukció foreach-val await.nyilvános statikus aszinkron rendszer . gyűjtemények . Általános . IAsyncEnumerable < int > GenerateSequence ()
{
for ( int i = 0 ; i < 20 ; i ++ )
{
await Task . késleltetés ( 100 );
hozamhozam i ; _ } } // vagy await foreach ( var number in GenerateSequence ()) { Console . WriteLine ( szám ); }
- Aszinkron kiadási típusok. A C# 8.0-tól kezdve a nyelv támogatja az aszinkron felszabadított típusokat, amelyek megvalósítják a System.IAsyncDisposable. Egy kifejezés operandusa usingmegvalósíthatja a IDisposablevagy IAsyncDisposable. Abban az esetben, ha a IAsyncDisposablefordító kódot generál awaita -ból visszaadott Taskértékhez IAsyncDisposable.DisposeAsync.
- Indexek és tartományok. A tartományok és indexek tömör szintaxist biztosítanak a sorozat egyes elemeinek vagy tartományainak eléréséhez. Az innováció magában foglalja az üzemeltetőket ^és .., valamint a System.IndexésSystem.Range
- null szakszervezeti hozzárendelés operátor. Az operátor ??=csak akkor rendelhető hozzá a jobb oldali operandus értékéhez a bal oldali operandushoz, ha a bal oldali operandus kiértékelése null.Lista < int > számok = null ;
int? i = null ;
számok ??= new Lista < int >();
számok . Add ( i ??= 17 );
számok . Add ( i ??= 20 );
Konzol . WriteLine ( string . Join ( " " , számok )); // kimenet: 17 17
Konzol . WriteLine ( i ); // kimenet: 17
- Nem menedzselt épített típusok. A C# 8.0-tól kezdve egy szerkesztett értéktípus nem kezelt, ha kizárólag nem kezelt típusú mezőket tartalmaz (például <T> általános típus).
- A stackalloc kifejezés beágyazott kifejezésekben. Ha a stackalloc kifejezés eredménye System.Span<T>vagy típusú System.ReadOnlySpan<T>, akkor más kifejezésekben is használható.Span < int > számok = stackalloc [] { 1 , 2 , 3 , 4 , 5 , 6 };
var ind = számok . IndexOfAny ( stackalloc [] { 2 , 4 , 6 , 8 });
Konzol . WriteLine ( ind ); // kimenet: 1
- A markerek $és @az interpolált szó szerinti karakterláncok sorrendje most bármi lehet.
Példa "Hello World!"
Az alábbiakban található a klasszikus „ Hello world ” program kódja C# nyelven konzolalkalmazáshoz:
Konzol . WriteLine ( "Hello World!" ); // A megadott szöveg kiírása a konzolra
Konzol . ReadKey (); // Várja meg, amíg a felhasználó megnyom egy billentyűt
és ugyanazon program kódja egy Windows Forms alkalmazáshoz:
névtér WindowsForms ;
nyilvános osztály Program
{
[STAThread]
public static void Main () => new DemoForm (). ShowDialog ();
}
nyilvános osztály DemoForm : Form
{
Címkecímke = új Címke ( );
nyilvános bemutató űrlap ()
{
címke . Szöveg = "Hello World!" ;
ezt . Vezérlők . Hozzáadás ( címke );
ezt . StartPosition = FormStartPosition . CenterScreen ;
ezt . BackColor = Szín . fehér ;
ezt . FormBorderStyle = FormBorderStyle . Fix3D ;
}
}
Megvalósítások
Számos C# implementáció létezik:
Jegyzetek
- ↑ "Mivel a C# nyelv a szintaxisát a C++-tól és a Java-tól örökölte..." Trey Nash. C # 2010: gyorsított tanfolyam szakembereknek = Accelerated C # 2010. - M . : Williams, 2010. - 17. o . — 592 p. — ISBN 978-5-8459-1638-9 .
- ↑ "A C# nyelv <...> sok hasznos funkciót örökölt más programozási nyelvektől, és közvetlenül kapcsolódik a világ két legszélesebb körben használt számítógépes nyelvéhez - a C-hez és a C ++-hoz, valamint a Java nyelv" , de tovább: "A C # és a Java közötti kapcsolat összetettebb . Mindkét nyelvet C és C++ alapú hordozható kód létrehozására tervezték, szintaxisuk és objektummodelljük használatával. Közvetlen kapcsolat azonban nincs e nyelvek között, inkább rokonok, közös ősök, de sok mindenben különböznek egymástól.” Herbert Schildt . C# oktatóanyag = C#. Útmutató kezdőknek. - M .: Piter , 2003. - S. 20. - ISBN 966-552-121-7 .
- ↑ Herbert Schildt . A C# teljes referencia = C#: A teljes hivatkozás. - M . : "Williams" kiadó, 2004. - S. 26 -27. — 752 p. — ISBN 5-8459-0563-X .
- ↑ Licenc (Roslyn) a Github tárhelyen . Letöltve: 2022. január 4. Az eredetiből archiválva : 2022. január 4.. (határozatlan)
- ↑ Licenc (.NET CLR) a Github tárhelyen . Letöltve: 2022. január 4. Az eredetiből archiválva : 2022. január 4.. (határozatlan)
- ↑ Liberty D. A C# programozási nyelv // C# programozás . - Szentpétervár. - 2003: Symbol-Plus, 2003. - S. 26 . — 688 p. — ISBN 5-93286-038-3 .
- ↑ Kovács, James C#/.NET History Lesson ( 2007. szeptember 7.). Letöltve: 2011. március 23. Az eredetiből archiválva : 2011. augusztus 21..
- ↑ A programozási nyelvek AZ: C# (angol) (a hivatkozás nem elérhető) . computerworld.com.au (2008. október 1.). Letöltve: 2014. szeptember 2. Az eredetiből archiválva : 2015. április 2.
- ↑ Microsoft C# GYIK (downlink) . Microsoft . Letöltve: 2008. március 25. Az eredetiből archiválva : 2003. április 30.. (határozatlan)
- ↑ C# nyelvi specifikáció (határozatlan) . — 4. - Ecma International , 2006. Archív másolat (hivatkozás nem elérhető) . Hozzáférés dátuma: 2011. január 26. Az eredetiből archiválva : 2012. december 2. (határozatlan)
- ↑ Visual C# .net szabvány (JPEG). Microsoft (2003. szeptember 4.). Letöltve: 2009. június 18. Az eredetiből archiválva : 2011. augusztus 21.. (határozatlan)
- ↑ Szabványos ECMA-334 C# nyelvi specifikáció, 4. kiadás . Ecma International (2006. június). Letöltve: 2017. május 16. Az eredetiből archiválva : 2010. október 31..
- ↑ ISO/IEC 23270:2003 Információtechnológia -- C# nyelvi specifikáció . Nemzetközi Szabványügyi Szervezet (2003. április). Letöltve: 2017. május 16. Az eredetiből archiválva : 2017. augusztus 5..
- ↑ A Microsoft C# 2.0 specifikációja csak a 2.0 verzió új szolgáltatásainak leírását tartalmazza. A verzió jellemzőit a fenti 1.2-es specifikáció ismerteti.
- ↑ A C# nyelvű 3.0, 4.0 és 5.0 verziók még nem rendelkeznek az ECMA vagy ISO/IEC által jóváhagyott specifikációkkal.
- ↑ 12 Mads Torgersen . Új funkciók a C# 7.0 -ban . .NET Blog . Microsoft (2017. március 9.). Letöltve: 2017. május 7. Az eredetiből archiválva : 2017. április 11..
- ↑ A C++ sablonok és a C# generikusok közötti különbségek (C# programozási útmutató ) . Microsoft (2016. december 17.). Letöltve: 2017. május 16. Az eredetiből archiválva : 2021. augusztus 7..
- ↑ Anders Hejlsberg - Adatok programozása C# 3.0 -ban . A Channel 9 csapata . Microsoft (2004. június 16.). Letöltve: 2017. május 16. Az eredetiből archiválva : 2018. november 12..
- ↑ Visual Studio 2010: Példák a C# 4.0-hoz . Microsoft (2012. július 17.). Letöltve: 2017. május 16. Az eredetiből archiválva : 2017. február 28.. (határozatlan)
- ↑ Új szolgáltatások a C# 8.0-ban . docs.microsoft.com. Letöltve: 2020. június 11. Az eredetiből archiválva : 2020. augusztus 8.. (Orosz)
- ↑ Dot Net Anywhere . Letöltve: 2009. március 5. Az eredetiből archiválva : 2009. május 4.. (határozatlan)
Irodalom
- John Skeet. C# szakembereknek: a programozás finomságai, 3. kiadás, új fordítás = C# in Depth, 3rd ed.. - M . : "Williams" , 2014. - 608 p. - ISBN 978-5-8459-1909-0 .
- Christian Nagel és társai C# 5.0 és .NET 4.5 szakembereknek = Professional C# 5.0 és .NET 4.5. - M . : "Dialektika" , 2013. - 1440 p. - ISBN 978-5-8459-1850-5 .
- A. Hejlsberg, M. Torgersen, S. Wiltamuth, P. Gold. C# programozási nyelv. Klasszikus számítástechnika. 4. kiadás = C# programozási nyelv (C# 4.0), 4. kiadás. - Szentpétervár. : "Péter" , 2012. - 784 p. - ISBN 978-5-459-00283-6 . Archivált : 2011. október 10. a Wayback Machine -nél
- E. Stillman, J. Green. C# tanulása. 2. kiadás = Head First C#, 2. kiadás. - Szentpétervár. : "Piter" , 2012. - 704 p. - ISBN 978-5-4461-0105-4 . (nem elérhető link)
- Andrew Troelsen. C# 5.0 és a .NET 4.5 Framework, 6. kiadás = Pro C# 5.0 és a .NET 4.5 Framework, 6. kiadás. - M . : "Williams" , 2013. - 1312 p. — ISBN 978-5-8459-1814-7 .
- Joseph Albahari, Ben Albahari. C# 6.0. Könyvtár. Teljes nyelvű leírás = C# 6.0 dióhéjban: A végleges hivatkozás. - M. : "Williams" , 2018. - 1040 p. - 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 és munkatársai : Visual C # 2010: teljes tanfolyam = Beginning Microsoft Visual C # 2010. - M . : Dialectics , 2010. - ISBN 978-5-8459-1699-0 .
Linkek
Bibliográfiai katalógusokban |
|
---|
C# |
---|
Verziók |
|
---|
TOVÁBB |
|
---|
Összefüggő |
|
---|
ISO szabványok |
---|
- Kategóriák: Kategória:ISO szabványok
- Kategória:OSI protokollok
|
1 -től 9999 -ig |
|
---|
10 000 és 19999 között |
|
---|
20000+ |
|
---|
Lásd még: Azon cikkek listája, amelyek címe "ISO"-val kezdődik |
C programozási nyelv |
---|
|
Fordítók |
|
---|
Könyvtárak |
|
---|
Sajátosságok |
|
---|
Néhány leszármazott |
|
---|
C és más nyelvek |
|
---|
Kategória:C programozási nyelv |
Microsoft Research (MSR) |
---|
Főbb projektek | |
---|
MSR Labs | Labs | Tényleges |
|
---|
megszakított |
- Mélyhal
- listák
- Élő vágólap
- fotoszintet
- Volta
|
---|
|
---|
Labs |
|
---|
Egyéb osztályok |
|
---|
|
---|
Kategória |
Ingyenes és nyílt forráskódú Microsoft szoftver |
---|
Általános információ |
|
---|
Szoftver _ | Alkalmazások |
|
---|
Játékok |
|
---|
Programozási nyelvek |
|
---|
Keretrendszerek és fejlesztőeszközök |
|
---|
Operációs rendszerek |
|
---|
Egyéb |
|
---|
|
---|
Licencek |
|
---|
Kapcsolódó témák |
- .NET Alapítvány
- F-Sharp Software Foundation
- Microsoft Open Specification Promise
- Outercurve Alapítvány
|
---|
Kategória |