A C története#
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 állapota, beleértve a közelgő kiadásokra vonatkozó funkciókat is, megtalálható a GitHub dotnet/roslyn-adattárában . Ha meg szeretné tudni, hogy mikor lett hozzáadva egy adott funkció a nyelvhez, tekintse meg a C# verzióelőzményeit 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őrzés ellenőrzi, hogy a fogott 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ó a nyelv és a kódtár közötti kapcsolatokról a függőség hátterének meghatározásához.
C# 13-es verzió
Kiadás dátuma: 2024. november
A C# 13 a következő új funkciókat tartalmazza:
-
params
gyűjtemények: aparams
mó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
lock
típus és szemantika: Ha egylock
utasí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 struct
visszaadott, amely támogatja aDispose()
mintát a kizárólagos hatókörből való kilépéshez. - Új feloldósorozat –
\e
: A\e
karakterkonstansként használható a UnicodeESCAPE
U+001B
karakterhez. - 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
ref
helyi ésunsafe
környezeteket. - A felületek implementálásához
ref struct
típusokat használhat. - Az általános típusparaméterek argumentumaként engedélyezheti
ref struct
típusokat. - A részleges tulajdonságok és indexelők mostantól
partial
tí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.
Az automatikusan implementált tulajdonságban a fordító által generált háttérmező elérésére szolgáló field
kulcsszót előzetes funkcióként mutatták be.
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
class
vagystruct
típusban létrehozhatja. -
Gyűjteménykifejezések – Új szintaxis a gyűjteménykifejezések megadásához, beleértve az oldalpár 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
struct
típusban. - Választható paraméterek a lambdakifejezésekben – A lambda kifejezések paramétereinek alapértelmezett értékeit definiálhatja.
-
ref readonly
-ref readonly
A paraméterparaméterek nagyobb egyértelműséget adnak a paramétereket vagyref
paramétereket használóin
API-k számára. -
Bármilyen típusú alias – Az
using
alias 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 sztringkonstansok
- Újvonalak a sztring interpolációs kifejezéseiben
- Listaminták
- Fájl helyi típusai
- Szükséges tagok
- Automatikus alapértelmezett szerkezetek
-
Mintaegyezés
Span<char>
állandónstring
-
Kiterjesztett
nameof
hatókör - Numerikus intPtr
-
ref
mezők ésscoped ref
- Továbbfejlesztett metóduscsoport-átalakítás delegálásra
- Figyelmeztető hullám 7
A C# 11 általános matematikai és számos olyan funkciót tartalmaz, 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 sztringek használata egyszerűbbé válik a nyers sztringkonstansokkal, a sztringinterpolációk új vonalával és az UTF-8 sztringkonstansokkal. 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 using
Irá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
const
karakterlá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
sealed
módosító elemet, amikor egyToString
tí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
AsyncMethodBuilder
metódusokon - CallerArgumentExpression attribútum
- A C# 10 támogatja a
#line
pragma új formátumát.
További funkciók is elérhetők voltak előzetes verzióban. Ezeknek a funkcióknak a használatához be kell állítania <LangVersion>
Preview
a projektben:
- Általános attribútumok a cikk későbbi részében.
- statikus absztrakt tagok a felületeken.
A C# 10 továbbra is dolgozik a ceremónia eltávolításával, az adatok algoritmusoktól való elkülönítésével é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 sztringkezelők és AsyncMethodBuilder
-viselkedés javíthatja a teljesítményt. Ezek a nyelvi funkciók a .NET-futtatókörnyezetben lettek alkalmazva a .NET 6 teljesítménybeli javítása érdekében.
A C# 10 a .NET-kiadások éves ütemére való váltást is jelzi. 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 a .NET 5-tel jelent meg. Ez minden olyan szerelvény alapértelmezett nyelvi verziója, amely a .NET 5 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
- A funkciók igazítása és befejezése
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.
A csak init-only halmazok a rekordok nem strukturált mutációinak (with
kifejezéseinek) 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
és or
a minták használatávalnot
. 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 kötőhártya-mintákhoz
and
mindkét mintázatnak meg kell egyeznie -
A disjunctive
or
mintákhoz mindkét mintázatnak meg kell egyeznie -
A negated
not
minták megkövetelik , hogy egy minta ne egyezzen - A relációs minták megkövetelik , hogy a bemenet kisebb legyen, nagyobb, mint, kisebb vagy egyenlő, vagy nagyobb legyen, mint egy adott állandó
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
cél cpu natív méretű egész számtípusainak modellezése ésnuint
típusok. - 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
localsinit
utasí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ú
new
kifejezések -
static
né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 a .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:
- Olvasható tagok
- Alapértelmezett felületi metódusok
-
Mintaegyeztetési fejlesztések:
- Kifejezések váltása
- Tulajdonságminták
- Rekordminták
- Pozicionálási minták
- Deklarációk használata
- Statikus helyi függvények
- Eldobható refstruktúra
- Null értékű hivatkozástípusok
- Aszinkron streamek
- Indexek és tartományok
- Null-szenesítés hozzárendelése
- Nem felügyelt strukturált típusok
- Stackalloc beágyazott kifejezésekben
- Az interpolált szó szerinti sztringek fejlesztése
Az alapértelmezett illesztőtagok a CLR-ben igényelnek fejlesztéseket. Ezek a funkciók a .NET Core 3.0 CLR-ben lettek hozzáadva. A tartományok és indexek, valamint az aszinkron streamek ú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őket rögzítés nélkül érhet el.
- A helyi változókat újra hozzárendelheti
ref
. - A tömbökben inicializálókat
stackalloc
is használhat. - 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
==
használhatja!=
a pocaktípusokat. - 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.
- A metódusfeloldás, ha az argumentumok eltérnek egymástól
in
, javították. - 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:
-
-publicsign
a szerelvények nyílt forráskódú szoftver (OSS) aláírásának engedélyezéséhez. -
-pathmap
a 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ú utasítást használjon
fixed
, amely támogatja a mintát. - Rögzített mezők elérése rögzítés nélkül.
-
ref
Helyi változók hozzárendelése. - Deklaráljon
readonly struct
típusokat, amelyek azt jelzik, hogy a szerkezet nem módosítható, és paraméterkéntin
kell átadni a tagmetelyek számára. - Adja hozzá a
in
mó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 readonly
A 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 struct
tí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.
- Aláhúzásjelek számkonstansokban:
- A számkonstansok mostantól kezdő aláhúzásjelekkel is rendelkezhetnek a nyomtatott számjegyek előtt.
-
private protected
hozzáférés-módosító:- A
private protected
hozzá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
ref
kifejezé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# a C# 7.1-es verziójával kezdte el kiadni a pontkiadá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:
-
async
Main
módszer- Az alkalmazás belépési pontja rendelkezhet a
async
módosítóval.
- Az alkalmazás belépési pontja rendelkezhet a
-
default
literá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 rekordelemek nevei sok esetben következtethetők 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-s verziója a Visual Studio 2017-ben jelent meg. Ez a verzió néhány evolúciós és hűvös dolog a vénában C # 6.0. Íme néhány új funkció:
- Kimenő változók
- Csonkok és destrukció
- Mintaegyezés
- Helyi függvények
- Bővített kifejezés testes tagjai
- Helyiek újrafedés
- 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 kiemelt érték a kulcsszóval out
használandó változók deklarációjának kondenzálása, és több visszatérési érték engedélyezése a rekordon keresztül. A .NET Core mostantól bármilyen operációs rendszert céloz meg, és határozottan figyeli a felhőt és a hordozhatóságot. 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 Visual Studio 2015-ben megjelent 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
- Testes tagok kifejezése
- Null propagátor
- Sztring interpolációja
- név operátor
További új funkciók:
- Index-inicializálók
- Várakozás a fogásban/végül 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 Visual Studio 2012-ben megjelent 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 async
await
programozás modelljébe került. A főbb funkciók listája:
- Aszinkron tagok
- Hívóinformációs attribútumok
- Code Project: Hívóinformációs attribútumok a C# 5.0-ban
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 megjelentek ezek a funkciók, a C# ismét megváltoztatta a játékot úgy, hogy az aszinkronizálást első osztályú résztvevőként a nyelvre sütötte.
C# 4.0-s verzió
Kiadás dátuma: 2010. április
A Visual Studio 2010-ben 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 contravariance nagyobb hatalmat ad a generikusok használatára, de kissé tudományosak, és valószínűleg a keretrendszerek és a könyvtárszerzők értékelik 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, és a futtatókörnyezetre hagyva rendezheti, hogy mi történjen a következő lépéssel.
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 jelent meg a Visual Studio 2008-as verziójával együtt, bár a nyelvi funkciók teljes hajója valójában .NET-keretrendszer 3.5-ös verzió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
- Bővítménymetelyek
- 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
egy ciklust list.Average()
írna az egész számok listájának átlagának kiszámításához, ezt egyszerűen megteheti. 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 a Visual Studio 2005-tel együtt:
- Generikus
- 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 akadálymentesség
- Metóduscsoport-átalakítások (meghatalmazottak)
- 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. Ha például lehetővé teszi, List<T> hogy List<string>
List<int>
típusbiztos műveleteket végezzen ezeken a sztringeken vagy egész számokon, miközben végigvezeti őket. A generics használata jobb, mint egy ListInt
olyan típus létrehozása, amely minden műveletből származik ArrayList
vagy abból Object
származik.
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ú) összes elemet egy hurokkal foreach
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 Visual Studio .NET 2003-at tartalmazó C# 1.2-es verziója. Tartalmazott néhány kisebb fejlesztést a nyelvhez. A legfontosabb, hogy ezzel a verzióval kezdődően a ciklusban foreach
létrehozott kód egy Dispose adott IEnumerator implementáláskor IEnumeratorlehívottIDisposable.
C# 1.0-s verzió
Kiadás dátuma: 2002. január
Amikor visszatér és megnézi, a Visual Studio .NET 2002-ben megjelent C# 1.0-s verziója nagyon hasonlított a Java-ra. Az ECMA által kitűzött tervezési célok részeként egy "egyszerű, modern, általános célú objektumorientált nyelvre" törekedett. Abban az időben, úgy néz ki, mint a Java 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 rendelkezik a beépített aszinkron képességekkel és néhány, a magától értetődő általános funkciókkal. Ami azt illeti, nem volt általános teljesen. És LINQ? Még nem érhető el. Ezek a kiegészítések eltarthat néhány évig, hogy jöjjön ki.
A C# 1.0-s verziója a maihoz képest funkcióktól megfosztottnak tűnt. Találná magát, hogy részletes kódot ír. De mégis, valahol el kell kezdened. A C# 1.0-s verziója életképes alternatíva volt a Java helyett a Windows platformon.
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
- Utasítások
- Attribútumok
Cikkeredetileg megjelent az NDepend blog, jóvoltából Erik Dietrich és Patrick Smacchia.