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

C# 13-es verzió

Kiadás dátuma: 2024. november

A C# 13 a következő új funkciókat tartalmazza:

  • params gyűjtemények: a params módosító nem korlátozódik tömbtípusokra. Mostantól bármilyen felismert gyűjteménytípussal használhatja a params, beleértve a Span<T>és a felülettípusokat is.
  • Új lock típus és szemantika: Ha egy lock 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. A ref struct visszaadott, amely támogatja a Dispose() 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 Unicode ESCAPEU+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 és unsafe 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.

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 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 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éterek nagyobb egyértelműséget biztosítanak az ref paramétereket vagy in paramétereket használó 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 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:

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:

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 and mintákhoz mindkét mintának egyeznie kell
  • A diszjunktív or minták esetében elegendő, ha az egyik minta egyezik
  • A tagadott not mintá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 és nuint tí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 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 .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. 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 stackalloc tö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 in eseté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:

  • -publicsign a nyílt forráskódú szoftverek (OSS) által történő szerelvényaláírás 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ú fixed utasí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.
  • 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 á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 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# 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:

  • async Main 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 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ó:

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:

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:

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:

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:

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:

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