C éles

Helyes cím: "  C #  ".

A technikai korlátok miatt a cím kívánt tipográfiáját nem sikerült megfelelően megjeleníteni.

VS #
Logó.
A C éles illusztráció szemléltető képe
Az első változat kelte 2001
Paradigma Strukturált , elengedhetetlen , objektumorientált
Szerző Microsoft
Utolsó verzió 9,0 ( 2020. szeptember 4)
Fejlesztői verzió 8.0
Gépelés Statikus , erős , nominatív
Nyelvjárások 1,0, 1,1, 1,2, 2,0 (ECMA), 3,0, 3,5, 4,0, 5,0, 6,0, 7,0, 7,1, 7,2, 7,3, 8,0, 9,0
Befolyásolta C ++ , Java
Befolyásolt Swift , Vala , F # , Kotlin , TypeScript
Végrehajtások Microsoft .NET , Mono , DotGNU
Operációs rendszer Cross-platform
Weboldal docs.microsoft.com/en-us/dotnet/csharp és docs.microsoft.com/de-de/dotnet/csharp
Fájlkiterjesztés .cs

C # ( C éles [ s i ː . A vizeletmintákban a ö ɑ ː p ] a brit angol ) egy nyelvet a objektumorientált programozás , forgalomba hozza a Microsoft 2002 óta, és célja, hogy bővítse a platform Microsoft .NET .

A C ++ - ból származik, és nagyon közel van a Java-hoz, amelyből az általános szintaxist, valamint a fogalmakat veszi fel, olyan fogalmakkal egészül ki , mint az operátor túlterhelése , indexelők és delegáltak . Különösen webes alkalmazások fejlesztésére használják az ASP.NET platformon .

Bemutatás

A C # egy programozási nyelv objektum-orientált , erősen beírt típus , amely a C és a C ++ - ból származik , olyan nyelv, mint a Java . Arra használják, hogy dolgozzon ki a webes alkalmazások , valamint az asztali alkalmazások , web szolgáltatások , parancsok, kütyü, vagy osztály könyvtárak . A C # -ben az alkalmazás olyan osztályokból álló csomag, ahol az egyik osztálynak van egy Main metódusa , ahogyan azt a Java-ban is megteszik.

A C # célja a .NET platformon , a Microsoft által a COM sikerének érdekében létrehozott technológiai verem fejlesztése .

A C # futtatható fájlok fel vannak osztva összeállításokra, névterekre, osztályokra és osztálytagokra. Az összeállítás a lefordított űrlap, amely lehet program (futtatható) vagy osztálykönyvtár (dll). Egy összeállítás tartalmazza az MSIL-ben futtatható kódot, valamint a szimbólumokat. Az MSIL kódot futás közben gépi nyelvre fordítja le a .NET platform just-in-time funkciója .

.NET platform

A C # a .NET platform fejlesztésére szolgál. Ennek a technológiai veremnek a szíve a .NET-keretrendszer , amely a következőkből áll:

A .NET platform másik terméke a Visual Studio .NET fejlesztői környezet , amely általában a C # programozására használatos eszköz.

Jellemzők

A C # a C ++ nyelvből származó nyelv , biztonságos gépelést , valamint az objektumorientált nyelvek beágyazásának , öröklődésének és polimorfizmusának lehetőségeit biztosítja . A C # -ban minden típus objektum . A nyelv rendelkezik szemétszedővel és kivételkezelő rendszerrel .

A biztonságos gépelés különösen azt jelenti, hogy a következő műveleteket elutasítják: egy inicializálatlan változó használata, egy tömb határain túli hozzáférés megkísérlése, olyan típusú konverziók, amelyek eredményei nem kiszámíthatók, a határértékek túllépése a műveletek aritmetikája során.

A Java számos lehetősége megtalálható a C # -ben, és erős hasonlóság mutatkozik a C # -ben írt kód és az egyenértékű Java-kód között.

A C # -ban a változók lehetnek referencia típusúak vagy érték típusúak . Az értéktípusok primitív típusok, felsorolások, strukturált és semmissé váló típusok. A referencia típusok osztályok, interfészek, tömbök és delegáltak .

Primitív típusok

A primitív típusok: sbyte, rövid, int, hosszú, byte, ushort, uint, ulong, char, float, double, decimal és bool.

osztály

A C # nyelv legalapvetőbb konstrukciói az osztályok . Ezek tartalmazhatnak konstansokat, mezőket, tulajdonságokat, indexelőket, módszereket, eseményeket, operátorokat, konstruktorokat, destruktorokat vagy alosztályokat. Az elemi osztályok karakterlánc és objektum.

strukturált

A struktúrák hasonlóak az osztályokhoz, de értéktípusok, és nem örökölhetők .

delegált

A megbízott olyan módszerre való hivatkozás, amely rendelkezik bizonyos paraméterekkel. A delegáltak metódusokat rendelnek a változókhoz, és paraméterként továbbítják őket.

enum

A felsorolt ​​típus olyan értéktípus, amely állandókkal rendelkezik. Minden felsorolt ​​típusnak van egy mögöttes típusa: egy primitív típus, amelyet az állandók értékei alapján határoznak meg.

semmissé tehető típus

A nullable primitív típusok, amelyek emellett nullák lehetnek . Minden primitív T típushoz tartozik egy nullázható Tp típus. Például egy int típusú változó? tartalmazhat int vagy null.

Szintaxis

Minta kód  :

using System; public class HelloWorld { public static void Main(string[] args) { Console.WriteLine("Hello world!"); } } Kulcsszavak

A C # 1.0 kulcsszavai:

abstract class event if new readonly as const explicit implicit null ref base continue extern in object return bool decimal false int operator sbyte break default finally interface out sealed byte delegate fixed internal override short case do float is params sizeof catch double for lock private stackalloc char else foreach long protected static checked enum goto namespace public string struct throw typeof unchecked using volatile switch true uint unsafe virtual while this try ulong ushort void

A C # 2.0 és 6.0 közé felvett kulcsszavak:

add dynamic join select alias equals let set ascending from nameof value async get on var await global orderby where by group partial when descending into remove yield

Különbségek a C ++ -tól

A nyelv számos változást mutat a C / C ++ értéktől; különösen a következő pontokat vesszük figyelembe:

  • A mutatók közvetlen kezelése csak a nem biztonságosként megjelölt kódon belül végezhető el , és csak a megfelelő jogosultsággal rendelkező programok hajthatják végre a nem biztonságos kód blokkjait . A legtöbb mutató manipuláció biztonságos referenciákon keresztül történik, amelyek címe közvetlenül nem változtatható meg, és a legtöbb mutató és allokációs műveletet a memória túlcsordulása ellen ellenőrzik. Pointerek csak pont típusú értékek , objektum típusok , kezeli a szemétgyűjtő , csak hivatkozni;
  • tárgyakat nem lehet kifejezetten megsemmisíteni. A szemétgyűjtő gondoskodik a memória felszabadításáról, ha már nincs utalás egy tárgyra. A nem kezelt típusokat kezelő objektumok esetében azonban lehetséges az interfész megvalósítása IDisposableaz erőforrás felszabadításakor végrehajtandó feldolgozás meghatározásához;
  • több osztály öröklése tilos, de egy osztály korlátlan számú interfészt képes megvalósítani, és egy interfész több interfészből is örökölhet;
  • A C # sokkal tipizáltabb, mint a C ++; az egyetlen implicit konverzió az egész számok különböző tartományai és a származtatott típusból a szülő típusig terjedő konverzió. Nem történik implicit konverzió logikai értékek és egész számok, a felsorolás tagjai és az egész számok között, vagy egy érvénytelen típusra mutató mutatók között (bár az Object típusra való hivatkozások ezen utolsó pontnál ugyanolyan hatást eredményeznek). A felhasználó által definiált konverziókat definiálhatjuk implicitnek vagy explicitnek;
  • a tömbök deklarálásának szintaxisa nem ugyanaz: int[] a = new int[5]csere int a[5]. Mivel dinamikus allokációról van szó, az int [] a referencia deklarációja (null, ha nincs inicializálva). Ugyanakkor a tömb manuális kiosztása a veremben továbbra is lehetséges a kulcsszóval stackalloc ;
  • tagjainak felsorolásával gyűlt össze saját névtér  ;
  • A C # nem kezeli a sablonokat , de ezt a funkciót felváltotta a C # 2.0-val megjelent általános típusok ;
  • a tulajdonságok bevezetésre kerültek, és sajátos szintaxist biztosítanak a tagadatok eléréséhez (valamint megkönnyítik a több szál egyidejű elérését );
  • a rendelkezésre álló reflexió teljes típusai;
  • A delegáltakat, amelyek a függvényekre mutató mutatók listája, különösen az események programozásához használják.

Különbségek a Java-tól

Bár a C # hasonló a Java-hoz, van néhány figyelemre méltó különbség, például:

  • A Java nem teszi lehetővé a kezelő túlterhelését  ;
  • A Java kivételeket ellenőrzött, míg a C # kivételeket nem ellenőrzik, mint a C ++ -nál;
  • A Java lehetővé teszi a HTML dokumentációk automatikus előállítását forrásfájlokból Javadoc-szintaxis leírások felhasználásával, míg a C # XML alapú leírásokat használ;
  • A Java nem rendelkezik előfeldolgozó nyelvvel;
  • A C # támogatja az indexelőket, a delegált módszereket és az eseményeket (ahol a Java meg van elégedve az Observer tervezési mintával );
  • A C # nem támogatja az interfészek és az absztrakt osztályok névtelen megvalósítását;
  • A C # csak a statikus belső osztályokat támogatja;
  • C # támogatja struktúrák mellett osztályok (szerkezetek érték típusok  : tárolunk a tartalom és nem a cím);
  • A C # beépített nyelvet (DllImport) és hordozható szintaxist használ natív könyvtár hívásához, míg a Java a Java Native Interface-t használja  ;
  • A C # integrálja a genericitást , és a .NET gépet módosították annak lehetővé tétele érdekében (a Java is integrálja, de a megvalósítását a javac fordítóban hajtották végre, a Java bájtkód megváltoztatása nélkül ). Az eredmény elméleti vonatkozásairól további részletek találhatók a referenciában, a 70–89 .

Történelem

2002 szeptemberében mutatták be a .NET platformot és a C # -t a nyilvánosság számára. A C # ennek a platformnak a tényleges nyelve lesz, a .NET platform egy részének megvalósítására is használták.

változatok
Év Változat Könyvtár Fő változás
2002 1.0 .NET-keretrendszer 1.0 és 1.1
2005 2.0 .NET-keretrendszer 2.0 a C # -hoz és a kerethez nagyvonalúságot adott
2008 3.0 .NET keretrendszer 3.5 LINQ (nyelvi integrált lekérdezések)
2010 4.0 .NET Framework 4.0 dinamikus típusok
2012 5.0 .NET keretrendszer 4.5 aszinkron módszerek
2015 6.0 .NET keretrendszer 4.6 verzió a linuxhoz
2016 7.0 .NET-keretrendszer> = 4.5 Szalagok, helyi funkciók
2019 8.0 .NET standard> = 2.1 és .NET Core> = 3.0 Csak olvasási tag, Merge Assignment Operator


C # 2.0

A Microsoft 2007 - ben tette elérhetővé a nyilvánosság számára 2005. október, hosszú béta-tesztelés után a .NET könyvtár 2.0-s verziója, a szinte összes kapcsolódó eszköz új verziójával együtt. A C # nem kivétel a szabály alól, ezért a 2.0 verzióban jelenik meg a következő kiegészítésekkel:

  • Részleges osztályok, amelyek lehetővé teszik egy osztály megvalósításának szétosztását több fájl között.
  • Az általános típusok , amelyek nem a C ++ sablon egyszerű másolata . Például a C # generics-ban megtaláljuk a típuskorlátozást (az általánosításban használható típusok meghatározásához). Másrészt lehetetlen kifejezéseket használni paraméterként az általánosításhoz.
  • Egy új iterátor, amely lehetővé teszi a koroutinok használatát a kulcsszóval yield, amely megegyezik yielda Pythonban találhatóval .
  • Névtelen módszerek konfigurálható zárási szabályokkal .
  • „Nullable” típusok, vagyis annak megadása, hogy egy értéktípus null lehet. Ezek kérdőjel karakterrel vannak deklarálva? „Miután a típus neve, mint ez: int? i = null;.
  • Az új kettős kérdőjel kezelő "?? »Két operandusot használ, és az első nem nulla értéket adja vissza. Azért vezették be, hogy megadjon alapértelmezett értéket a "semmissé váló" típusokhoz.

Tájékoztatásul a 2.0-s verzióban bevezetett új funkciók teljes specifikációi a külső linkeken érhetők el .

Anders Hejlsberg , Delphi édesapja a generikumok C #, Java és C ++ nyelven történő megvalósításáról beszélt ebben az interjúban (ben) .

A nullázható típusok funkcionalitását csak néhány héttel a 2.0 verzió nyilvános kiadása előtt korrigálták, mert kiderült, hogy ha a változó értéke valóban nulla, akkor ez a változó nem volt semleges a kifejezés hagyományos értelmében, vagyis: ez nem üres hivatkozás. Így a nulla értékű primitív típus objektummá konvertálása nem nulla értékű hivatkozást eredményezett nulla értékre. A probléma kijavításához ezért szükséges volt a CLR kernel kijavítása, valamint a .NET 2.0 tartomány összes termékének (Visual Studio 2005, SQL Server 2005, C # és VB.NET) számos ellenőrzésének és javításának elvégzése.

C # 3.0

A C # 3.0-t a PDC 2005-n mutatták be. A végleges verzió azóta elérhető 2007. november 19letölthető a Microsoft webhelyéről (hu) . A fő újdonságok a következők:

  • Kulcsszavak hozzáadása select, fromvalamint whereSQL, XML lekérdezések vagy közvetlenül a gyűjtemények létrehozásának és végrehajtásának lehetővé tétele. Ez a funkció a Language Integrated Query (LINQ ) program része .
  • Egy objektum inicializálásának új lehetősége: Ehelyett Client c = new Client(); c.Nom = "Dupont";használhatjukClient c = new Client{ Nom = "Dupont" };
  • Lambda kifejezések  : ListeTrucs.Where( delegate(Truc x) { return x.Size > 10; } );válikListeTrucs.Where( x => x.Size > 10 );
  • A lokális változók típusának következtetése: string s = "Dupont"helyettesíthetővar s = "Dupont"
  • Névtelen típusok bevezetése: var x = new { Nom = "Dupont" }helyett használhatóclass __anonymous { private string _nom; public string Nom { get { return _nom; } set { _nom = value; } } } __anonymous x = new __anonymous(); x.Nom = "Dupont";
  • Kifejezési fák: lehetővé teszik a kód összeállítását könnyen elemezhető és manipulálható objektumok fái formájában.
  • Kiterjesztett módszerek: lehetővé teszi metódusok hozzáadását egy osztályhoz egy első paraméter hozzáadásával this.

A C # 3.0 és a LINQ áttekintése megtalálható a .NET Framework Development Center oldalon .

A C # 3.0-ban összeállított kód teljes mértékben kompatibilis a 2.0-s verzióval, mivel az elvégzett fejlesztések pusztán szintaktikusak vagy a fordítás idején kompenzált parancsikonokból állnak. A 3.5-ös verziójú könyvtárakban bevezetett új funkciók (LINQ stb.) Azonban nem használhatók a C # korábbi verzióival.

Ehhez a verzióhoz Windows XP vagy újabb ( Vista vagy Windows 7 ) szükséges. Ez nem érhető el Windows 2000 rendszerhez .

C # 4,0

A 4-es verzió nyelve számos új funkciót kínál:

  • a változók dinamikus beírása a kulcsszó segítségével dynamic ;
  • megnevezett és választható argumentumok;
  • az interfészek és az általános küldöttek kovarianciájának és ellentmondásának támogatása.

A .NET 4.0 keretrendszer megjelent 2010. április 12, a Visual Studio 2010. kíséretében . Többek között a következőket kínálja:

  • az új párhuzamos könyvtár: Feladat párhuzamos könyvtár  ;
  • az Entity Framework optimalizált változata az adatbázis-hozzáféréshez a LINQ használatával;
  • a LINQ PLINQ nevű párhuzamos változata.

C # 5,0

Az aszinkron programok programozására használt 5-ös nyelv egyszerűen kulcsszavak hozzáadásával asyncés await.

Megváltozott a hurok bezárásának viselkedése foreach. A lezárásiforeach problémák elkerülése érdekében már nem szükséges lokális változót hurokba bevezetni .

Vegye figyelembe a hívóval kapcsolatos információkat, amelyek lehetővé teszik a tulajdonságnak nevezett módszer nevének megismerését.

C # 6.0

A C # hatodik változata számos változtatást hajt végre, többek között:

Az automatikusan megvalósított tulajdonságok (vagy automatikus tulajdonságok) először a C # 3-ban jelentek meg, hogy egyszerűsítsék azoknak a tulajdonságoknak a deklarálását, amelyek egyszerűen beillesztik a mezőkhöz való hozzáférést. Habár tömörebbé teszik a kódot, hátrányuk van: deklaráció szinten nem lehet inicializálni őket, ezt szükségszerűen a konstruktorban kell megtenni. Ezen túlmenően az automatikus tulajdonságokat nem lehet csak olvashatóvá tenni, mivel nincsenek mutátoruk (szetterük), ezért nem tudtunk értéket rendelni hozzájuk.

A C # 6 azzal a problémával foglalkozik, hogy lehetővé teszi az automatikus tulajdonságok inicializálását a deklaráció szintjén.

Szabványosítás

A C # -ot az ECMA (ECMA-334) szabványosította 2001. decemberés az ISO / IEC ( ISO / IEC 23270 ) 2003-ban .

A 2.0 verzió változásait az ECMA szabványosította (ECMA-334) 2006. júniusés az ISO / IEC ( ISO / IEC 23270: 2006 ) szerint 2006. szeptember.

A Microsoft megnyitotta a C # által használt könyvtárak forráskódját 2007. októbera Microsoft Referencia Forráslicenc (MS-RSL) alapján.

Nyelv neve

Az ECMA 334 szabvány és az ISO 23270 a nyelv nevét Unicode karakterként 0043 (C nagybetű), amelyet a 0023 (#) karakter követi. "C élesnek" ejtik, és nem "C hash" -nak, hanem "éles" jelöli a zenei szimbólumot ♯, de a # szükséges a számítógép billentyűzetéről történő könnyű hozzáféréshez, amely helyett a keresztet ("hash") kínálja.
A "C #" nevet zenei jelölések ihlették, ahol az éles jel azt jelzi, hogy az írott hangot félhanggal kell növelni. Ez hasonló a C ++ nyelv nevéhez, ahol a "++" azt jelzi, hogy egy változót 1-gyel kell növelni az értékelés után. A # szimbólum négy "+" szimbólum ligandumának is látszik (egy-két rácsban), ami azt jelenti, hogy a nyelv a C ++ növekménye.

C++ ++

Függelékek

Külső linkek

Bibliográfia

  • C # és .NET - Gérard Leblanc - 2002 - Éditions Eyrolles - ( ISBN  2-212-11066-9 )
  • C # és .NET 2. verzió - Gérard Leblanc - 2006 - Éditions Eyrolles - ( ISBN  2-212-11778-7 )
  • C # Head First - Andrew Stellman, Jennifer Greene - 2008 - Éditions Digit Books - ( ISBN  978-2-81500-001-7 )
  • Bevezetés a C # - Pierre-Yves Saumont, Antoine Mirecourt - 2001 - Éditions Eyrolles - ( ISBN  2-7464-0301-3 )
  • A C # Survival Guide - Gilles Tourreau - 2010 - Éditions Pearson Education - ( ISBN  978-2-7440-2432-0 )
  • Benoît Prieur, C # programozás: felkészülés az MCSA tanúsításokra - 70-483. Vizsga , ENI kiadások,2018. május 16, 448   p. ( ISBN  978-2-409-01382-9 , OCLC  1038026533 )
  • (en) C # 2005 programozói referencia - Adrian Kingsley-Hughes, Kathie Kingsley-Hughes - 2006 - Wrox Edition - ( ISBN  0-470-04641-4 )
  • (en) C # Essentials, 2. kiadás - Ben Albahari, Peter Drayton, Brad Merrill - 2002 - O'Reilly Media Edition - ( ISBN  0-596-00315-3 )
  • (en) Szakmai C #, 3. kiadás - Simon Robinson, Christian Nagel, Karli Watson, Jay Glynn, Morgan Skinner, Bill Evjen - 2004 - Wrox Edition - ( ISBN  0-7645-5759-9 )

Megjegyzések és hivatkozások

  1. (fr) [1]
  2. "  https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8  " (Hozzáférés : 2019. július 3. )
  3. (en) Balagurusamy, Programming In C # , Tata McGraw-Hill Education - 2008, ( ISBN  9780070667570 )
  4. (en) Anders Hejlsberg - Mads Torgersen - Scott Wiltamuth - Peter Golde, A C # programozási nyelv (C # 4.0 borítás), Hordozható dokumentumok , Addison-Wesley Professional - 2010, ( ISBN  9780132481724 )
  5. (en) Mark Michaelis - Eric Lippert, Essential C # 6.0 , Addison-Wesley Professional - 2015, ( ISBN  9780134176130 )
  6. (en) MSDN webhely
  7. (in) Támogatás az MPRI [PDF] altípus alatt , 73–80 .
  8. http://msdn.microsoft.com/fr-fr/library/vstudio/dd264739(v=vs.100).aspx
  9. ( bent ) MSDN webhely .
  10. http://blogs.msdn.com/b/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-considered-harmful.aspx
  11. http://msdn.microsoft.com/fr-fr/library/hh534540.aspx
  12. Thomas Levesque , "  Új funkciók a C # 6-ban  " (hozzáférés : 2015. szeptember 19. ) .
  13. Microsoft referencia forrás licenc (MS-RSL)
  14. ECMA 334. o. 11.