Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk a C# nyelv egyes főbb kiadásainak előzményeit ismerteti. A C#-csapat folyamatosan újít és új funkciókat ad hozzá. A nyelvi funkciók részletes ismertetése, beleértve a közelgő kiadásokra tervezett funkciókat, megtalálható a GitHubon, a dotnet/roslyn adattárban. Ha meg szeretné tudni, hogy mikor lett hozzáadva egy adott funkció a nyelvhez, tekintse meg a C#-verzióelőzményeket fájlt a GitHub dotnet/csharplang adattárában.
Fontos
A C#-nyelv a C# specifikáció által meghatározott típusokra és metódusokra támaszkodik, mint a funkciók egy részének szabványos kódtára . A .NET platform ezeket a típusokat és metódusokat számos csomagban biztosítja. Ilyen például a kivételfeldolgozás. A rendszer minden throw utasítást vagy kifejezést ellenőriz annak ellenőrzéséhez, hogy a kidobandó objektum származik-e a rendszerből Exception. Hasonlóképpen, minden catch ellenőrizzük, hogy az elkapott típus származik-e Exception. Minden verzió új követelményeket adhat hozzá. A legújabb nyelvi funkciók régebbi környezetekben való használatához előfordulhat, hogy bizonyos kódtárakat kell telepítenie. Ezeket a függőségeket az egyes verziók lapja dokumentálja. További információt a nyelv és a kódtár közötti kapcsolatról itt találhat, hogy jobban megértse a függőség hátterét.
C# 14-es verzió
Kiadás dátuma: 2025. november
A C# 14 a következő új funkciókat tartalmazza:
- Bővítménytagok
- Nulla-érték feltételes hozzárendelése
-
nameoftámogatja a kötetlen általános típusokat -
További implicit konverziók
Span<T>ésReadOnlySpan<T> - módosítók egyszerű lambdaparamétereken
-
fieldalátámasztott tulajdonságok -
partialesemények és konstruktorok - felhasználó által definiált összetett hozzárendelési operátorok
C# 13-es verzió
Kiadás dátuma: 2024. november
A C# 13 a következő új funkciókat tartalmazza:
-
paramsgyűjtemények: aparamsmódosító nem korlátozódik tömbtípusokra. Mostantól bármilyen felismert gyűjteménytípussal használhatja aparams, beleértve aSpan<T>és a felülettípusokat is. - Új
locktípus és szemantika: Ha egylockutasítás célja egy System.Threading.Lock, a fordító létrehoz egy kódot, amely a Lock.EnterScope() metódust használja egy kizárólagos hatókör megadásához. Aref structvisszaadott, amely támogatja aDispose()mintát a kizárólagos hatókörből való kilépéshez. - Új feloldósorozat –
\e: A\ekarakterkonstansként használható a UnicodeESCAPEU+001Bkarakterhez. - Kis optimalizálások a metóduscsoportok túlterhelésének feloldásához.
- Implicit indexelő hozzáférés az objektum inicializálóiban: Az implicit "from the end" index operátor (
^) mostantól engedélyezett egy objektum inicializáló kifejezésben. - Iterátorokban és aszinkron metódusokban használhat
refhelyi ésunsafekörnyezeteket. - A felületek implementálásához
ref structtípusokat használhat. - Az általános típusparaméterek argumentumaként engedélyezheti
ref structtípusokat. - A részleges tulajdonságok és indexelők mostantól
partialtípusok esetében engedélyezettek. - A túlterhelésfeloldási prioritás lehetővé teszi, hogy a kódtár-szerzők egy túlterhelést a többinél jobbként jelöljenek ki.
C# 12-es verzió
Kiadás dátuma: 2023. november
A C# 12-ben a következő funkciók lettek hozzáadva:
-
Elsődleges konstruktorok – Az elsődleges konstruktorokat bármilyen
classvagystructtípusban létrehozhatja. -
Gyűjteménykifejezések – Új szintaxis a gyűjteménykifejezések megadásához, beleértve a szétterjedő elemet (
..e) a gyűjtemények kibontásához. -
Beágyazott tömbök – A beágyazott tömbök lehetővé teszik rögzített méretű tömbök létrehozását egy
structtípusban. - Választható paraméterek a lambdakifejezésekben – A lambda kifejezések paramétereinek alapértelmezett értékeit definiálhatja.
-
ref readonly-ref readonlyA paraméterek nagyobb egyértelműséget biztosítanak azrefparamétereket vagyinparamétereket használó API-k számára. -
Bármilyen típusú alias – Az
usingalias direktíva használatával bármilyen típust aliasként használhat, nem csak névvel ellátott típusokat. - Kísérleti attribútum – Kísérleti jellemző jelzése.
Az Interceptors pedig előzetes verziójú funkcióként jelent meg.
Összességében a C# 12 olyan új funkciókat biztosít, amelyek hatékonyabbá teszik a C#-kódok írását. A már ismert szintaxis több helyen is elérhető. Az egyéb szintaxis lehetővé teszi a kapcsolódó fogalmak konzisztenciáját.
C# 11-es verzió
Kiadás dátuma: 2022. november
A C# 11-ben a következő funkciók lettek hozzáadva:
- Nyers sztringkonstansok.
- Általános matematikai támogatás.
- Általános attribútumok.
- UTF-8 karakterlánc-literálok.
- Újsorok a string interpolációs kifejezéseiben.
- Listaminták.
- Fájl-helyi típusok.
- Szükséges tagok.
- Automatikusan alapértelmezett szerkezetek.
- Mintaegyezés
Span<char>állandónstring. - Kiterjesztett
nameofhatókör. - Az
nintésuinta kulcsszavak aliasa System.IntPtr és System.UIntPtrSystem.UIntPtr, illetve. -
refmezők ésscoped ref - Továbbfejlesztett metóduscsoport-átalakítás delegálásra.
- Figyelmeztető hullám 7
A C# 11 bevezetésre kerül az általános matematikai megközelítés és számos olyan funkció, amelyek támogatják ezt a célt. Az összes számtípushoz egyszer írhat numerikus algoritmusokat. A típusok használatának struct megkönnyítésére további funkciók is rendelkezésre áll, például a szükséges tagok és az automatikusan alapértelmezett szerkezetek. A szövegek kezelése egyszerűbbé válik a nyers szövegkonstansok, a szöveg interpolációkon belüli új sorok és az UTF-8 szövegkonstansok használatával. Az olyan funkciók, mint a fájl helyi típusai, lehetővé teszik a forrásgenerátorok egyszerűbb használatát. Végül a listaminták további támogatást nyújtanak a minták egyeztetéséhez.
C# 10-es verzió
Kiadás dátuma: 2021. november
A C# 10 a következő funkciókat és fejlesztéseket adja hozzá a C# nyelvhez:
- Rekordstruktúra
- A struktúratípusok fejlesztése
- Interpolált sztringkezelők
-
global usingIrányelvek - Fájlhatókörű névtér deklarációja
- Kiterjesztett tulajdonságminták
- A Lambda-kifejezések természetes típusúlehetnek, ahol a fordító delegált típust tud kikövetkeztetni a lambda kifejezésből vagy metóduscsoportból.
- Lambda-kifejezések visszatérési típust deklarálhatnak, ha a fordító nem tudja következtetni.
- Lambda-kifejezésekre attribútumok alkalmazhatók.
- A C# 10-ben
constkarakterláncok inicializálhatók karakterlánc interpolációval, amennyiben minden helyőrző maga is állandó karakterlánc. - A C# 10-ben hozzáadhatja a
sealedmódosító elemet, amikor egyToStringtípusában felülbírálja a -et. - A határozott hozzárendelésre és a nullállapot-elemzésre vonatkozó figyelmeztetések pontosabbak.
- Engedélyezze a hozzárendelést és a deklarációt ugyanabban a dekonstruálásban.
-
Attribútum engedélyezése
AsyncMethodBuildermetódusokon - CallerArgumentExpression attribútum
- A C# 10 támogatja a
#linepragma új formátumát.
A C# 10 továbbra is dolgozik a ceremónia eltávolításával, az adatok algoritmusoktól való elválasztásával és a .NET futtatókörnyezet jobb teljesítményével kapcsolatos témákon.
Sok funkció azt jelenti, hogy kevesebb kódot ír be ugyanazon fogalmak kifejezéséhez. A rekordstruktúra számos olyan metódust szintetizál, mint a rekordosztályok . A szerkezetek és a névtelen típusok támogatják a kifejezéseket. A globálisan használt irányelvek és fájlhatókörű névtér-deklarációk azt jelentik , hogy a függőségeket és a névtérszervezést világosabban fejezi ki. A Lambda fejlesztései megkönnyítik a lambda-kifejezések deklarálásához a használatuk helyét. Az új tulajdonságminták és a destrukciós fejlesztések tömörebb kódot hoznak létre.
Az új interpolált karakterlánckezelők és a AsyncMethodBuilder viselkedése javíthatja a teljesítményt. Ezek a nyelvi funkciók a .NET futtatókörnyezetben lettek alkalmazva a 6. .NET teljesítménybeli javítása érdekében.
A C# 10 azt is jelzi, hogy a .NET kiadások éves üteme nagyobb mértékben változik. Mivel nem minden funkció teljesíthető éves időkeretben, kipróbálhat néhány "előzetes verziós" funkciót a C# 10-ben. Az általános attribútumok és a statikus absztrakt tagok is használhatók a felületeken, de ezek az előzetes verziójú funkciók a végleges kiadás előtt változhatnak.
C# 9-es verzió
Kiadás dátuma: 2020. november
A C# 9 .NET 5 kiadással jelent meg. Ez minden olyan szerelvény alapértelmezett nyelvi verziója, amely az .NET 5-ös kiadást célozza. A következő új és továbbfejlesztett funkciókat tartalmazza:
- Rekordok
- Csak inicializálási beállítások
- Legfelső szintű utasítások
- Mintaegyeztetési fejlesztések: relációs minták és logikai minták
- Teljesítmény és együttműködés
- Illeszkedés és kidolgozás jellemzők
A C# 9 a korábbi kiadások három témáját folytatja: eltávolítja a ceremóniát, elválasztja az adatokat az algoritmusoktól, és további mintákat biztosít több helyen.
A legfelső szintű utasítások azt jelentik, hogy a fő program egyszerűbben olvasható. Kevesebb szükség van a ceremóniára: névtérre, osztályra Program , és static void Main() ezek mind szükségtelenek.
A bevezetés records egy tömör szintaxist biztosít a referenciatípusokhoz, amelyek az egyenlőség értékszemantikáját követik. Ezekkel a típusokkal definiálhat olyan adattárolókat, amelyek általában minimális viselkedést határoznak meg.
Az init-only setterek a rekordok nem destruktív módosításának képességét biztosítják. A C# 9 kovariantikus visszatérési típusokat is hozzáad, hogy a származtatott rekordok felülbírálhassák a virtuális metódusokat, és visszaadhassák az alapmetódus visszatérési típusából származtatott típust.
A mintaegyeztetési képességek több módon is kibővültek. A numerikus típusok mostantól támogatják a tartománymintákat. A minták kombinálhatók a and, or és not minták alkalmazásával. Zárójelek hozzáadhatók az összetettebb minták tisztázásához:
A C# 9 új mintaegyeztetési fejlesztéseket tartalmaz:
- A típusminták megegyeznek egy adott típussal egyező objektummal
- A zárójeles minták kényszerítik vagy hangsúlyozzák a mintakombinációk elsőbbségét
-
A konjunktív
andmintákhoz mindkét mintának egyeznie kell -
A diszjunktív
orminták esetében elegendő, ha az egyik minta egyezik -
A tagadott
notminták megkövetelik, hogy egy minta ne egyezzen - A relációs minták megkövetelik hogy a bemenet kisebb legyen, nagyobb legyen, kisebb vagy egyenlő legyen, vagy nagyobb vagy egyenlő legyen egy adott állandónál
Ezek a minták bővítik a minták szintaxisát. Az egyik leggyakoribb használat a null értékű ellenőrzés új szintaxisa:
if (e is not null)
{
// ...
}
Ezen minták bármelyike bármely olyan környezetben használható, ahol a minták megengedettek: is mintakifejezések, switch kifejezések, beágyazott minták és az switch utasítás címkéjének mintázata case .
Egy másik funkciókészlet támogatja a nagy teljesítményű számítástechnikát a C#-ban:
- A
nintésnuinttípusok modellezi a natív méretű egész típusokat a célprocesszoron. - A függvénymutatók delegált jellegű funkciókat biztosítanak, ugyanakkor elkerülik a delegált objektum létrehozásához szükséges foglalásokat.
- Az
localsinitutasítást kihagyhatja az utasítások mentéséhez.
Teljesítmény és együttműködés
Egy másik fejlesztéskészlet olyan forgatókönyveket támogat, amelyekben a kódgenerátorok funkciókat adnak hozzá:
- A modul inicializálói olyan metódusok , amelyeket a futtatókörnyezet hív meg egy szerelvény betöltésekor.
- A részleges metódusok támogatják az új hozzáférés-módosítókat és a nem érvénytelen visszatérési típusokat. Ezekben az esetekben végrehajtást kell biztosítani.
A funkciók igazítása és befejezése
A C# 9 számos más, a fejlesztői hatékonyságot javító kis funkciót is hozzáad, mind az írási, mind az olvasási kódot:
- Cél típusú
newkifejezések -
staticnévtelen függvények - Cél típusú feltételes kifejezések
- Hurkok bővítménytámogatása
GetEnumerator()foreach - A Lambda-kifejezések deklarálhatják az elvetési paramétereket
- Attribútumok alkalmazhatók a helyi függvényekre
A C# 9 kiadás folytatja a munkát, hogy a C# modern, általános célú programozási nyelv legyen. A funkciók továbbra is támogatják a modern számítási feladatokat és alkalmazástípusokat.
C# 8.0-s verzió
Kiadás dátuma: 2019. szeptember
A C# 8.0 az első nagyobb C# kiadás, amely kifejezetten .NET Core-t célozza. Egyes funkciók az új Common Language Runtime (CLR) képességekre támaszkodnak, mások a csak a .NET Core-ban hozzáadott kódtártípusokra. A C# 8.0 a következő funkciókat és fejlesztéseket adja hozzá a C# nyelvhez:
- Csak olvasható tagok
- Alapértelmezett illesztőtagok
-
Mintaegyeztetési fejlesztések:
- Kifejezések váltása
- Tulajdonságminták
- Többszörös minták
- Pozicionálási minták
- Deklarációk használata
- Statikus helyi függvények
- Eldobható referenciastruktúra
- Null értékű hivatkozástípusok
- Aszinkron folyamok
- Indexek és tartományok
- Null-összevonó értékadás
- Nem felügyelt strukturált típusok
- Stackalloc beágyazott kifejezésekben
- Az interpolált szó szerinti karakterláncok fejlesztése
Az alapértelmezett illesztőtagok a CLR-ben igényelnek fejlesztéseket. Ezeket a funkciókat hozzáadtuk a CLR-hez a .NET Core 3.0-hoz. A tartományok, indexek és aszinkron adatfolyamok új típusokat igényelnek a .NET Core 3.0-kódtárakban. A null értékű hivatkozástípusok a fordítóban implementálva sokkal hasznosabbak, ha a kódtárak jegyzetekkel vannak elfűzve, hogy szemantikai információkat nyújtsanak az argumentumok null állapotáról és az értékek visszaadásáról. Ezek a széljegyzetek a .NET Core-kódtárakban lesznek hozzáadva.
C# 7.3-es verzió
Kiadás dátuma: 2018. május
A C# 7.3 kiadásnak két fő témája van. Az egyik téma olyan funkciókat biztosít, amelyek lehetővé teszik, hogy a biztonságos kód olyan teljesítményű legyen, mint a nem biztonságos kód. A második téma növekményes fejlesztéseket biztosít a meglévő funkciókhoz. Ebben a kiadásban új fordítóbeállítások is megjelentek.
A következő új funkciók támogatják a biztonságos kód jobb teljesítményének témáját:
- Rögzített mezők rögzítése nélkül is elérhetők.
- A helyi változókat újra hozzárendelheti
ref. - Inicializálókat használhat
stackalloctömbökön. - Bármilyen típusú utasítást használhat
fixed, amely támogatja a mintát. - Általánosabb korlátozásokat is használhat.
A meglévő funkciókhoz a következő fejlesztések történtek:
- Tesztelheti
==és!=a tuple típusokkal. - A kifejezésváltozókat több helyen is használhatja.
- Attribútumokat csatolhat az automatikusan implementált tulajdonságok háttérmezőhöz.
- Az argumentumok eltérésének
inesetén a metódusfeloldás javult. - A túlterhelés feloldása mostantól kevesebb kétértelmű esetből áll.
Az új fordítóbeállítások a következők:
-
-publicsigna nyílt forráskódú szoftverek (OSS) által történő szerelvényaláírás engedélyezéséhez. -
-pathmapa forráskönyvtárak leképezésének biztosításához.
C# 7.2-es verzió
Kiadás dátuma: 2017. november
A C# 7.2 számos kis nyelvi funkciót adott hozzá:
- Inicializálók tömbökön
stackalloc. - Bármilyen típusú
fixedutasításokat használjon, amelyek támogatják a mintát. - Fixált mezők elérése rögzítés nélkül.
-
refHelyi változók hozzárendelése. - Deklaráljon
readonly structtípusokat, amelyek azt jelzik, hogy a szerkezet nem módosítható, és paraméterkéntinkell átadni a tagmetelyek számára. - Adja hozzá a
inmódosító paramétert annak megadásához, hogy az argumentumot hivatkozással adja át, de a hívott metódus nem módosítja. -
ref readonlyA metódus visszatérési módosítójával jelezheti, hogy egy metódus hivatkozással adja vissza az értékét, de nem engedélyezi az adott objektumba történő írást. - Deklaráljon
ref structtípusokat, hogy jelezze, hogy egy struktúratípus közvetlenül fér hozzá a felügyelt memóriához, és mindig vermet kell lefoglalni. - Használjon általánosabb korlátozásokat.
-
Nem záró névvel ellátott argumentumok:
- A pozícióargumentumok nevesített argumentumokat követhetnek.
- Numerikus literálok elején lévő aláhúzásjelek:
- A számkonstansok mostantól kezdő aláhúzásjelekkel is rendelkezhetnek a nyomtatott számjegyek előtt.
-
private protectedhozzáférés-módosító:- A
private protectedhozzáférés-módosító lehetővé teszi a hozzáférést az ugyanabban a szerelvényben lévő származtatott osztályokhoz.
- A
- Feltételes
refkifejezések:- A feltételes kifejezés (
?:) eredménye mostantól hivatkozás lehet.
- A feltételes kifejezés (
C# 7.1-es verzió
Kiadás dátuma: 2017. augusztus
A C# 7.1-es verziójától kezdve a C# elkezdte kiadni a részkiadásokat. Ez a verzió hozzáadta a nyelvi verzióválasztás konfigurációs elemét, három új nyelvi funkciót és új fordítói viselkedést.
A kiadás új nyelvi funkciói a következők:
-
asyncMainmódszer- Az alkalmazás belépési pontja rendelkezhet a
asyncmódosítóval.
- Az alkalmazás belépési pontja rendelkezhet a
-
defaultliterális kifejezések- Az alapértelmezett értékkifejezésekben az alapértelmezett literálkifejezéseket akkor használhatja, ha a céltípust ki lehet következtetni.
- Kikövetkesedő elemnevek
- A tuple elemeinek neve sok esetben következtethető a tuple inicializálásából.
- Mintaegyezés általános típusparamétereken
- A mintaegyeztetési kifejezéseket olyan változókon is használhatja, amelyek típusa általános típusparaméter.
Végül a fordító két lehetőséggel -refout rendelkezik, és -refonly ez szabályozza a referencia-szerelvény létrehozását.
C# 7.0-s verzió
Kiadás dátuma: 2017. március
A C# 7.0 verzió a Visual Studio 2017-tel jelent meg. Ez a verzió néhány evolúciós és érdekes újítást tartalmaz a C# 6.0 szellemében. Íme néhány új funkció:
- Kimenő változók
- Csonkok és destrukció
- Mintaegyezés
- Helyi függvények
- Kibővített kifejezés testű tagok
- Hivatkozási helyi változók
- Ref visszaadja
További funkciók:
Mindezek a funkciók új képességeket kínálnak a fejlesztők számára, és minden eddiginél tisztább kódot írhatnak. A kiemelés a változók deklarációjának egyszerűsítése a out kulcsszóval, valamint több visszatérési érték engedélyezése tuppel. .NET Core mostantól bármilyen operációs rendszert céloz meg, és szilárdan figyel a felhőre és a hordozhatóságra. Ezek az új képességek minden bizonnyal elfoglalják a nyelvtervezők gondolatait és idejét, az új funkciók mellett.
C# 6.0-s verzió
Kiadás dátuma: 2015. július
A 2015-ös Visual Studio által kiadott 6.0-s verzió számos kisebb funkciót adott ki, amelyek hatékonyabbá tették a C# programozását. Íme néhány közülük:
- Statikus importálás
- Kivételszűrők
- Automatikus tulajdonság-inicializálók
- Kifejezés-alapú tagok
- Null propagátor
- Sztringinterpoláció
- név operátor
További új funkciók:
- Index-inicializálók
- Várakozás a catch/finally blokkokban
- A csak lekéréses tulajdonságok alapértelmezett értékei
Ha ezeket a funkciókat együtt tekinti meg, egy érdekes mintát fog látni. Ebben a verzióban a C# elkezdte megszüntetni a nyelvi sablont, hogy a kód terse és olvashatóbb legyen. Tehát a tiszta, egyszerű kód rajongói számára ez a nyelvi verzió hatalmas győzelem volt.
Ezzel a verzióval együtt egy másik dolgot is megtettek, bár ez önmagában nem egy hagyományos nyelvi funkció. Szolgáltatásként kiadták Roslyn fordítót. A C#-fordító mostantól C#-ban van megírva, és a fordítót a programozási erőfeszítések részeként használhatja.
C# 5.0-s verzió
Kiadás dátuma: 2012. augusztus
A 2012-es Visual Studio által kiadott C# 5.0-s verziója a nyelv koncentrált verziója volt. Ennek a verziónak szinte minden erőfeszítése egy másik úttörő nyelvi koncepcióba, az aszinkron asyncawait programozás modelljébe került. A főbb funkciók listája:
A hívóinformációs attribútum segítségével egyszerűen lekérheti a futó környezettel kapcsolatos információkat anélkül, hogy több kávatáblás tükröződési kódhoz kéne folyamodnia. Számos felhasználási módja van a diagnosztikai és naplózási feladatokhoz.
De async és await ezek a valódi csillagok ennek a kiadásnak. Amikor 2012-ben bemutatott funkciók megjelentek, a C# ismét megváltoztatta a játékot úgy, hogy az aszinkronitást első osztályú résztvevőként a nyelv szerves részévé tette.
C# 4.0-s verzió
Kiadás dátuma: 2010. április
A 2010-es Visual Studio kiadásban megjelent C# 4.0-s verziója néhány érdekes új funkciót vezetett be:
- Dinamikus kötés
- Elnevezett/nem kötelező argumentumok
- Általános kovariant és contravariant
- Beágyazott interop típusok
A beágyazott interop típusok enyhítik a COM interop szerelvények alkalmazáshoz való létrehozásával járó üzembehelyezési fájdalmat. Az általános kovariancia és a kontravariancia nagyobb rugalmasságot biztosít a generikusok használatához, de inkább elméletiek, és valószínűleg a keretrendszerek és könyvtárfejlesztők értékelik őket a leginkább. Az elnevezett és választható paraméterek lehetővé teszik a metódusok túlterhelésének megszüntetését és a kényelem biztosítását. Ezek közül a funkciók közül azonban egyik sem változtatja meg a paradigmát.
A fő funkció a kulcsszó bevezetése dynamic volt. A dynamic C# 4.0-s verziójában bevezetett kulcsszó képes felülbírálni a fordítót fordítási idő beírásakor. A dinamikus kulcsszó használatával a dinamikusan beírt nyelvekhez, például a JavaScripthez hasonló szerkezeteket hozhat létre. Létrehozhat egy dynamic x = "a string" elemet, majd hozzáadhat hozzá hatot, a következő lépést pedig a futtatókörnyezetre bízva döntheti el, mi történjen tovább.
A dinamikus kötés lehetőséget ad a hibákra, de nagy teljesítményt nyújt a nyelven belül is.
C# 3.0-s verzió
Kiadás dátuma: 2007. november
A C# 3.0-s verziója 2007 végén érkezett, a 2008-as Visual Studio mellett, bár a nyelvi funkciók teljes hajója valójában .NET Framework 3.5-ös verziójával rendelkezik. Ez a verzió jelentős változást jelzett a C# növekedésében. A C#-t egy igazán félelmetes programozási nyelvként hozta létre. Tekintsünk meg néhány fő funkciót ebben a verzióban:
- Automatikusan implementált tulajdonságok
- Névtelen típusok
- Lekérdezési kifejezések
- Lambda-kifejezések
- Kifejezésfák
- Kiterjesztési metódusok
- Implicit módon beírt helyi változók
- Részleges metódusok
- Objektum- és gyűjtemény inicializálók
Visszatekintve ezen funkciók közül sok elkerülhetetlennek és elválaszthatatlannak tűnik. Mind stratégiailag illeszkednek egymáshoz. Ez a C#-verzió gyilkos funkciója a lekérdezési kifejezés, más néven a Language-Integrated Query (LINQ) volt.
Az árnyaltabb nézet a linq felépítésének alapjaként a kifejezésfákat, a lambdakifejezéseket és a névtelen típusokat vizsgálja. De mindkét esetben a C# 3.0 forradalmi koncepciót mutatott be. A C# 3.0 elkezdte lefektetni a C# hibrid objektumorientált / funkcionális nyelvvé alakításának alapjaira.
Mostantól többek között SQL-stílusú, deklaratív lekérdezéseket is írhat a gyűjteményeken végzett műveletek végrehajtásához. Ahelyett, hogy for ciklust írna az egész számok listájának átlagának kiszámításához, most ezt olyan egyszerűen megteheti, mint list.Average(). A lekérdezési kifejezések és a bővítménymetelyek kombinációja sokkal intelligensebbé tette az egész számok listáját.
C# 2.0-s verzió
Kiadás dátuma: 2005. november
Tekintsük át a 2005-ben megjelent C# 2.0 főbb funkcióit, valamint a 2005-ös Visual Studio:
- Generics
- Részleges típusok
- Névtelen metódusok
- Null értékű értéktípusok
- Iterátorok
- Kovariancia és ellenvariancia
A C# 2.0 egyéb funkciói további képességeket adtak hozzá a meglévő funkciókhoz:
- Getter/setter külön hozzáférhetőség
- Metóduscsoport-átalakítások (delegátumok)
- Statikus osztályok
- Delegált következtetés
Míg a C# általános objektumorientált (OO) nyelvként indult, a C# 2.0-s verziója ezt gyorsan megváltoztatta. Az általános típusokkal a típusok és módszerek tetszőleges típuson működhetnek, miközben továbbra is megőrzik a típusbiztonságot. Például, egy List<T> lehetővé teszi, hogy List<string> vagy List<int> típusbiztos műveleteket hajtson végre ezekkel a sztringekkel vagy egész számokkal, miközben végighalad rajtuk. A generikusok használata jobb, mint egy ListInt típus létrehozása, amely ArrayList-ből származik, vagy amelyet Object-re konvertálnak minden művelet során.
A C# 2.0-s verziója iterátorokat hozott. Tömören fogalmazva az iterátorok lehetővé teszik, hogy egy List (vagy más Enumerable típusú) elemeit egy foreach hurokkal vizsgálja meg. Mivel az iterátorok a nyelv első osztályú részét képezik, jelentősen megnövelte a nyelv olvashatóságát, és hogy az emberek képesek érvelni a kóddal kapcsolatban.
C# 1.2-es verzió
Kiadás dátuma: 2003. április
A C# 1.2-es verziója a Visual Studio .NET 2003 részeként került kiadásra. Tartalmazott néhány kisebb fejlesztést a nyelvhez. A legfontosabb, hogy ezzel a verzióval kezdődően a foreach ciklusban létrehozott kód egy Dispose által hívott IEnumerator-re, amikor a IEnumerator implementálva van IDisposable.
C# 1.0-s verzió
Kiadás dátuma: 2002. január
Ha visszatekint és megvizsgálja, a Visual Studio .NET 2002-vel megjelent C# 1.0-s verzió nagyon hasonlított a Java-hoz. Az ECMA által megfogalmazott tervezési célok részeként "egyszerű, modern, általános célú objektumorientált nyelvnek" kívánt lenni. Akkoriban az, hogy Java-hoz hasonlít, azt jelentette, hogy elérte ezeket a korai tervezési célokat.
De ha most visszanéz a C# 1.0-ra, egy kicsit szédülni fog. Nem rendelkezett a beépített aszinkron képességekkel és néhány olyan fejlett generikus funkcionalitással, amit magától értetődően elvársz. Ami azt illeti, egyáltalán nem volt generikus. És LINQ? Még nem érhető el. Ezek a kiegészítések néhány évig fognak eltartani, mire megjelennek.
A C# 1.0-s verziója a maihoz képest funkcióktól megfosztottnak tűnt. Könnyen azon kaphatja magát, hogy terjengős kódot ír. De mégis, valahol el kell kezdened. A C# 1.0-s verziója a Windows platform Java életképes alternatíva volt.
A C# 1.0 főbb funkciói:
- Osztályok
- Szerkezetek
- Felületek
- Események
- Tulajdonságok
- Küldöttek
- Operátorok és kifejezések
- Állítások
- Attribútumok
Cikkeredetileg megjelent az NDepend blog, jóvoltából Erik Dietrich és Patrick Smacchia.