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 .

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# 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 vagy struct típusban létrehozhatja.
  • Gyűjteménykifejezések – Új szintaxis a gyűjteménykifejezések megadásához, beleértve az oldalpár operátort is (..) 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 vagy in paramétereket használó ref 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:

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:

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:

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:

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 , orés not a minták használatávaland. 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. Vegye figyelembe az alábbi példákat:

public static bool IsLetter(this char c) =>
    c is >= 'a' and <= 'z' or >= 'A' and <= 'Z';

A választható zárójelekkel egyértelművé teheti, hogy and a következőnél ornagyobb a elsőbbsége:

public static bool IsLetterOrSeparator(this char c) =>
    c is (>= 'a' and <= 'z') or (>= 'A' and <= 'Z') or '.' or ',';

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 és nuint 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 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:

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ént in 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 további általános 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.
  • Feltételes ref kifejezések:
    • A feltételes kifejezés (?:) eredménye mostantól hivatkozás lehet.

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:

  • asyncMain Módszer
    • Az alkalmazás belépési pontja rendelkezhet a async módosítóval.
  • 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ó:

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:

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 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 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:

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:

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 list.Average()egy ciklust for í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:

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 IEnumerator adott IEnumerator implementáláskor IDisposablelehívottDispose.

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:

Cikkeredetileg megjelent az NDepend blog, jóvoltából Erik Dietrich és Patrick Smacchia.