C skarp

Korrekt titel: "  C #  ".

På grund af tekniske begrænsninger kunne den ønskelige typografi af titlen ikke gengives korrekt.

VS #
Logo.
Illustrativt billede af punkt C skarpt
Dato for første version 2001
Paradigme Struktureret , bydende nødvendigt , objektorienteret
Forfatter Microsoft
Sidste version 9,0 (4. september 2020)
Udviklingsversion 8.0
Indtastning Statisk , stærk , nominativ
Dialekter 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
Påvirket af C ++ , Java
Påvirket Swift , Vala , F # , Kotlin , TypeScript
Implementeringer Microsoft .NET , Mono , DotGNU
Operativ system Tværplatform
Internet side docs.microsoft.com/en-us/dotnet/csharp og docs.microsoft.com/de-de/dotnet/csharp
Filudvidelse .cs

C # ( C skarp [ s i ː . Ʃ ɑ ː p ]britisk engelsk ) er et sprog med objektorienteret programmering , der er markedsført af Microsoft siden 2002 og designet til at udvides på platformen Microsoft .NET .

Det stammer fra C ++ og meget tæt på Java, hvorfra det tager den generelle syntaks såvel som begreberne op, tilføjer forestillinger som operatøroverbelastning , indekserer og delegerede . Det bruges især til at udvikle webapplikationerASP.NET- platformen .

Præsentation

C # er et programmeringssprog objektorienteret , stærkt skrevet , afledt af C og C ++ , det sprog som Java . Det bruges til at udvikle web-applikationer , såvel som desktop applikationer , web services , kommandoer, widgets, eller klasse biblioteker . I C # er en applikation en gruppe klasser, hvor en af ​​klasserne har en hovedmetode , som det gøres i Java.

C # er beregnet til at udvikle sig på .NET- platformen , en teknologistak oprettet af Microsoft for at efterkomme COM .

Eksekverbare filer i C # er opdelt i samlinger, navneområder, klasser og klassemedlemmer. En samling er den kompilerede form, som kan være et program (en eksekverbar) eller et klassebibliotek (en dll). En samling indeholder den eksekverbare kode i MSIL samt symbolerne. MSIL- kode oversættes til maskinsprog ved kørsel ved hjælp af just-in-time-funktionen på .NET-platformen.

.NET platform

C # er beregnet til udvikling på .NET-platformen. Hjertet i denne teknologiske stak er .NET-rammen , der består af:

Et andet produkt fra .NET-platformen er Visual Studio .NET- udviklingsmiljøet , et værktøj, der typisk bruges til programmering i C #.

Egenskaber

C # er et sprog, der stammer fra C ++ , det giver sikker indtastning samt mulighederne for indkapsling , arv og polymorfisme af objektorienterede sprog. I C # er alle typer objekter . Sproget har en affaldssamler og et undtagelseshåndteringssystem .

Sikker skrivning betyder især, at følgende operationer afvises: brug af en ikke-initialiseret variabel, forsøg på at få adgang ud over grænserne for et array, skriv konverteringer, hvis resultater ikke er forudsigelige, overskridelse af grænser under aritmetisk operation.

Mange af Java 's muligheder findes i C #, og der er en stærk lighed mellem kode skrevet i C # og tilsvarende kode i Java.

I C # kan variabler være af en referencetype eller af en værditype . Værdityper er primitive typer, enumerationer, struct og nullable type. Referencetyper er klasser, grænseflader, arrays og delegeret .

Primitive typer

De primitive typer er sbyte, kort, int, lang, byte, ushort, uint, ulong, char, float, dobbelt, decimal og bool.

klasse

De mest grundlæggende konstruktioner af C # -sproget er klasser . Disse kan indeholde konstanter, felter, egenskaber, indeksatorer, metoder, begivenheder, operatorer, konstruktører, destruktorer eller underklasser. De grundlæggende klasser er streng og objekt.

struct

Structs ligner klasser, men de er værdityper og kan ikke arves .

delegeret

En delegeret er en henvisning til en metode, der har visse parametre. Delegater bruges til at tildele metoder til variabler og videregive dem som parametre.

enum

En opregnet type er en værditype, der har et sæt konstanter. Hver opregnede type har en underliggende type: en primitiv type bestemt i henhold til konstanternes værdier.

ugyldig type

Nullables er primitive typer, der desuden kan være nul . Hver primitive type T har en tilknyttet ugyldig type T?. For eksempel en variabel af typen int? kan indeholde et int eller null.

Syntaks

Prøvekode  :

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

Nøgleordene i C # 1.0 er:

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

Nøgleord tilføjet mellem C # 2.0 og 6.0:

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

Forskelle fra C ++

Sproget har en række ændringer fra C / C ++; følgende punkter vil især blive bemærket:

  • Direkte manipulation af markører kan kun udføres inden for kode, der er markeret som usikker , og kun programmer med de relevante tilladelser kan udføre blokke med usikker kode . Mest markørmanipulation sker gennem sikre referencer, hvis adresse ikke kan ændres direkte, og de fleste markør- og allokeringshandlinger kontrolleres mod hukommelsesoverløb. Markører kan kun pege på typer af værdier , objekttyper , der håndteres af affaldssamleren , kan kun refereres til;
  • genstande kan ikke eksplicit ødelægges. Den affaldsindsamling sørger for frigørelse hukommelse, når der ikke længere er nogen reference til et objekt. For objekter, der håndterer ikke-administrerede typer, er det imidlertid muligt at implementere grænsefladen IDisposabletil at specificere behandling, der skal udføres, når ressourcen frigøres;
  • flere klassers arv er forbudt, men en klasse kan implementere et ubegrænset antal grænseflader, og en grænseflade kan arve fra flere grænseflader;
  • C # er meget mere skrevet end C ++; de eneste implicitte konverteringer er dem mellem de forskellige intervaller af heltal og dem fra en afledt type til en overordnet type. Ingen implicit konvertering finder sted mellem booleanske og heltal, mellem optællingsmedlemmer og heltal eller pegepunkter til en ugyldig type (selvom brugen af ​​referencer til objekttypen for dette sidste punkt giver mulighed for at opnå den samme effekt). Brugerdefinerede konverteringer kan defineres som implicitte eller eksplicitte;
  • syntaksen til at erklære arrays er ikke den samme: int[] a = new int[5]udskift int a[5]. Fordi det er en dynamisk tildeling, er int [] en erklæring om en reference (null, hvis den ikke initialiseres). Imidlertid forbliver den manuelle tildeling af en matrix på stakken mulig med nøgleordet stackalloc ;
  • medlemmerne af en opregning er samlet i deres eget navnerum  ;
  • C # administrerer ikke skabeloner , men denne funktionalitet er blevet erstattet af de generiske typer, der blev vist med C # 2.0;
  • egenskaberne er blevet introduceret og giver en bestemt syntaks til at få adgang til medlemsdata (såvel som at lette samtidig adgang via flere tråde );
  • de refleksion samlede typer til rådighed;
  • delegerede, som er lister over henvisninger til funktioner, bruges især til programmering af begivenheder.

Forskelle fra Java

Selvom C # ligner Java, er der nogle bemærkelsesværdige forskelle, for eksempel:

  • Java tillader ikke operatøroverbelastning  ;
  • Java har undtagelser kontrolleret, mens undtagelser i C # ikke er markeret, som i C ++;
  • Java tillader automatisk generering af HTML-dokumentation fra kildefiler ved hjælp af Javadoc-syntaksbeskrivelser, mens C # bruger XML-baserede beskrivelser;
  • Java har ikke et forprocessorsprog;
  • C # understøtter indekserer, delegerede metoder og begivenheder (hvor Java er tilfreds med Observer- designmønsteret );
  • C # understøtter ikke anonyme implementeringer af grænseflader og abstrakte klasser;
  • C # understøtter kun statiske indre klasser;
  • C # understøtter strukturer ud over klasser (strukturer er værdityper  : vi gemmer indholdet og ikke adressen);
  • C # bruger et indbygget sprog (DllImport) og bærbar syntaks til at kalde et oprindeligt bibliotek, mens Java bruger Java Native Interface  ;
  • C # integrerer genericitet , og .NET- maskinen er blevet ændret for at tillade dette (Java integrerer det også, men dets implementering blev udført i javac-kompilatoren uden at ændre Java- bytecode ). Flere detaljer om det teoretiske aspekt af denne præstation kan findes i referencen, dias 70-89 .

Historie

Det var i september 2002, at .NET-platformen og C # blev præsenteret for offentligheden. C # bliver det de facto sprog for denne platform, det er også blevet brugt til at implementere en del af .NET platformen.

versioner
År Version Bibliotek Hovedændring
2002 1.0 .NET framework 1.0 og 1.1
2005 2.0 .NET framework 2.0 genericitet tilføjet til C # og framework
2008 3.0 .NET framework 3.5 LINQ (Sprogintegrerede forespørgsler)
2010 4.0 .NET framework 4.0 dynamiske typer
2012 5.0 .NET framework 4.5 asynkrone metoder
2015 6.0 .NET framework 4.6 version til linux
2016 7,0 .NET framework> = 4.5 Tuples, lokale funktioner
2019 8.0 .NET standard> = 2.1 og .NET Core> = 3.0 LæsKun medlem, flet opgaveoperatør


C # 2.0

Microsoft stilles til rådighed for offentligheden iOktober 2005efter en lang periode med beta-test version 2.0 af .NET-biblioteket ledsaget af en ny version af næsten alle de tilknyttede værktøjer. C # er ingen undtagelse fra reglen og frigives derfor i version 2.0 med følgende tilføjelser:

  • Delvise klasser, der giver mulighed for at distribuere implementeringen af ​​en klasse over flere filer.
  • De generiske typer , som ikke er en simpel kopi af skabelonen C ++. For eksempel finder vi i C # generics typebegrænsningen (for at specificere de typer, der kan bruges i en generalisering). På den anden side er det umuligt at bruge udtryk som parametre for generaliseringen.
  • En ny iterator, der tillader brug af coroutines via nøgleordet yield, svarende til det, yieldder findes i Python .
  • Anonyme metoder med konfigurerbare lukningsregler .
  • "Udeladelige" typer, det vil sige evnen til at specificere, at en type værdi kan være nul. Disse erklæres med spørgsmålstegnets karakter "? "Efter den type navn, ligesom dette: int? i = null;.
  • Den nye operatør med dobbelt spørgsmålstegn "?? »Bruger to operander og returnerer den første ikke-nul. Det blev introduceret for at specificere en standardværdi for "nullable" -typer.

Som reference er de fulde specifikationer for de nye funktioner introduceret i version 2.0 tilgængelige på de eksterne links .

Anders Hejlsberg , Delphis far, talte om implementeringen af ​​generiske stoffer i C #, Java og C ++ i dette interview (i) .

Funktionaliteten af ​​ugyldige typer blev korrigeret blot et par uger før offentliggørelsen af ​​version 2.0, fordi det blev afsløret, at hvis værdien af ​​variablen faktisk var nul, var denne variabel ikke nul i den traditionelle betydning af udtrykket, det vil sige det er ikke en tom reference. Således resulterede konvertering af en primitiv nulværdi til et objekt i en ikke-nul-reference til en nulværdi. For at rette op på dette problem var det derfor nødvendigt at rette CLR-kernen og udføre adskillige kontroller og rettelser på alle produkterne i .NET 2.0-serien (Visual Studio 2005, SQL Server 2005, C # og VB.NET).

C # 3.0

C # 3.0 blev præsenteret på PDC 2005. Den endelige version er tilgængelig siden 19. november 2007til download fra Microsoft-webstedet (en) . De vigtigste nye funktioner er som følger:

  • Tilføjelsen af søgeord select, fromog whereat tillade dannelsen og udførelse af SQL, XML forespørgsler, eller direkte på samlinger. Denne funktionalitet er en del af programmet Language Integrated Query (LINQ ) .
  • Ny mulighed for at initialisere et objekt: I stedet for Client c = new Client(); c.Nom = "Dupont";kan vi brugeClient c = new Client{ Nom = "Dupont" };
  • Lambda-udtryk  : ListeTrucs.Where( delegate(Truc x) { return x.Size > 10; } );bliverListeTrucs.Where( x => x.Size > 10 );
  • Slutning af typen af ​​lokale variabler: string s = "Dupont"kan erstattes afvar s = "Dupont"
  • Introduktion af anonyme typer: var x = new { Nom = "Dupont" }kan bruges i stedet forclass __anonymous { private string _nom; public string Nom { get { return _nom; } set { _nom = value; } } } __anonymous x = new __anonymous(); x.Nom = "Dupont";
  • Ekspressionstræer: tillad kompilering af kode i form af træer af let parsede og manipulerede objekter.
  • Udvidede metoder: giver dig mulighed for at tilføje metoder til en klasse ved at tilføje en første parameter this.

En oversigt over C # 3.0 og LINQ findes på siden .NET Framework Development Center .

Kode, der er udarbejdet i C # 3.0, er fuldt kompatibel med 2.0, da forbedringerne er rent syntaktiske eller består af genveje, der kompenseres ved kompileringstidspunktet. Nye funktioner, der er introduceret i version 3.5-biblioteker (LINQ osv.), Kan dog ikke bruges med tidligere versioner af C #.

Denne version kræver Windows XP eller nyere ( Vista eller Windows 7 ). Den er ikke tilgængelig til Windows 2000 .

C # 4.0

Den version 4 sprog indeholder flere nye funktioner:

  • dynamisk typning af variabler ved hjælp af nøgleordet dynamic ;
  • navngivne og valgfri argumenter
  • støtte til kovarians og kontrast til grænseflader og generiske delegerede.

Den .NET 4.0 rammer blev udgivet på12. april 2010, ledsaget af Visual Studio 2010. Det tilbyder blandt andet:

  • det nye parallelle bibliotek: Task Parallel Library  ;
  • en optimeret version af Entity Framework for databaseadgang ved brug af LINQ;
  • den parallelle version af LINQ kaldet PLINQ.

C # 5.0

Den version 5 sprog bruges til at programmere asynkrone programmer blot ved at tilføje søgeord asyncog await.

Opførelsen af lukninger i sløjfen foreacher blevet ændret. Det er ikke længere nødvendigt at indføre en lokal variabel i en sløjfe for foreachat undgå lukningsproblemer .

Bemærk også de oplysninger, der vedrører den, der ringer op, så du kan kende navnet på den metode, der kaldte en ejendom.

C # 6.0

Den sjette version af C # foretager flere ændringer, herunder:

Automatisk implementerede egenskaber (eller automatiske egenskaber) dukkede først op i C # 3 for at forenkle erklæringen af ​​egenskaber, der simpelthen indkapsler adgang til felter. Selvom de gør koden mere kortfattet, har de en ulempe: det er ikke muligt at initialisere dem på erklæringsniveau, det skal nødvendigvis gøres i konstruktøren. Derudover er det ikke muligt at gøre automatiske egenskaber skrivebeskyttet, da de ikke har nogen mutator (setter), og derfor kunne vi ikke tildele dem en værdi.

C # 6 løser dette problem ved at lade automatiske egenskaber initialiseres på deklarationsniveau.

Standardisering

C # er standardiseret af ECMA (ECMA-334) idecember 2001og af ISO / IEC ( ISO / IEC 23270 ) i 2003 .

Ændringerne i version 2.0 er standardiseret af ECMA (ECMA-334) ijuni 2006og ved ISO / IEC ( ISO / IEC 23270: 2006 ) iSeptember 2006.

Microsoft har åbnet kildekoden for nogle biblioteker, der bruges af C # i oktober 2007under Microsoft Reference Source License (MS-RSL).

Sprognavn

ECMA 334-standarden og ISO 23270 definerer navnet på sproget som Unicode- tegnet 0043 (store bogstaver C) efterfulgt af tegnet 0023 (#). Det udtales "C-skarpt" og ikke "C-hash", "skarpt" betegner faktisk det musikalske symbol ♯ men # er nødvendigt for nem adgang fra et computertastatur, der i stedet tilbyder korset ("hash").
Navnet "C #" er inspireret af musikalsk notation, hvor en skarp indikerer, at den skrevne note skal øges med en halvtone. Dette svarer til C ++ sprognavnet, hvor "++" angiver, at en variabel skal forøges med 1 efter at være blevet evalueret. # -Symbolet ligner også en ligatur med fire "+" -symboler (i et to-to-to-gitter), hvilket betyder, at sproget er en forøgelse af C ++.

C++ ++

Tillæg

eksterne links

Bibliografi

  • C # og .NET - Gérard Leblanc - 2002 - Éditions Eyrolles - ( ISBN  2-212-11066-9 )
  • C # og .NET version 2 - 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 )
  • Introduktion til C # - Pierre-Yves Saumont, Antoine Mirecourt - 2001 - Éditions Eyrolles - ( ISBN  2-7464-0301-3 )
  • C # Survival Guide - Gilles Tourreau - 2010 - Éditions Pearson Education - ( ISBN  978-2-7440-2432-0 )
  • Benoît Prieur, C # programmering: forberedelse til MCSA certificeringer - eksamen 70-483 , ENI udgaver,16. maj 2018, 448   s. ( ISBN  978-2-409-01382-9 , OCLC  1038026533 )
  • (da) C # 2005 Programmererreference - Adrian Kingsley-Hughes, Kathie Kingsley-Hughes - 2006 - Wrox Edition - ( ISBN  0-470-04641-4 )
  • (da) C # Essentials, 2. udgave - Ben Albahari, Peter Drayton, Brad Merrill - 2002 - O'Reilly Media Edition - ( ISBN  0-596-00315-3 )
  • (en) Professional C #, 3. udgave - Simon Robinson, Christian Nagel, Karli Watson, Jay Glynn, Morgan Skinner, Bill Evjen - 2004 - Wrox Edition - ( ISBN  0-7645-5759-9 )

Noter og referencer

  1. (fr) [1]
  2. "  https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8  " (Adgang til 3. juli 2019 )
  3. (en) Balagurusamy, Programmering i C # , Tata McGraw-Hill Education - 2008, ( ISBN  9780070667570 )
  4. (en) Anders Hejlsberg - Mads Torgersen - Scott Wiltamuth - Peter Golde, The C # Programming Language (Covering C # 4.0), Portable Documents , Addison-Wesley Professional - 2010, ( ISBN  9780132481724 )
  5. (da) Mark Michaelis - Eric Lippert, Essential C # 6.0 , Addison-Wesley Professional - 2015, ( ISBN  9780134176130 )
  6. (da) MSDN-sted
  7. (in) Understøttelse under undertastning af MPRI [PDF] , dias 73-80 .
  8. http://msdn.microsoft.com/fr-fr/library/vstudio/dd264739(v=vs.100).aspx
  9. (in) Site MSDN .
  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 , "  Nye funktioner i C # 6  " (adgang til 19. september 2015 ) .
  13. Microsoft Reference Source License (MS-RSL)
  14. ECMA 334, s. 11