C skarp

Tittelen på denne siden er feil på grunn av egenskapene til MediaWiki -programvaren . Den riktige tittelen er C # .
C #
programmeringsspråk
ForfatterAnders Hejlsberg
Opprinnelsesdato2000
Siste versjon10,0 [1]
BrukGenerisk
ParadigmerMultiparadigme: strukturert , imperativ , objektorientert , funksjonell , hendelsesdrevet
SkrivingStatisk , Dynamisk , Sterk , Trygg
Vanlige utvidelser.cs, .csproj
Påvirket avDelphi , C++ , Java , Eiffel , Haskell , ML
Det påvirketD , F # , Java , TypeScript
Referanseimplementering
Nettsteddocs.microsoft.com/en-us/dotnet/csharp/ , docs.microsoft.com/de-de/dotnet/csharp/ , docs.microsoft.com/ja-jp/dotnet/csharp/ , docs.microsoft.com / fr-fr / dotnet / csharp / og docs.microsoft.com/en-us/dotnet/csharp/

C # ( engelsk uttale: [ˈsiː ˈʃɑːp] , som uttrykket se skarpt , "se skarpt") [2] er et multi-paradigme programmeringsspråk som støtter alle konsepter innen objektorientert programmering. Den ble utviklet av Microsoft som en del av .NET - initiativet , og ble deretter godkjent som standard av ECMA (ECMA-334) og ISO ( ISO/IEC 23270 ).

Syntaksen og strukturen til C # er inspirert av forskjellige språk som er født tidligere, spesielt Delphi , C ++ , Java og Visual Basic .

Språkhistorie

Hoveddesigneren av C # er Anders Hejlsberg , en dansk informatiker som tidligere har vært involvert i utviklingen av språkene Turbo Pascal og Borland Delphi (for tiden eid av Embarcadero).

Det er vanlig oppfatning at inspirasjonen kom fra Java -språket , siden selv skaperen James Gosling , samt Bill Joy fra Sun Microsystem, kalte det en imitasjon av det, men mer begrenset når det gjelder pålitelighet, sikkerhet og produktivitet [3] . I stedet, ifølge Anders Hejlsberg og Microsoft selv, er strukturen til C # nærmere den til C++-språket enn til Java [4] .

C # er nært knyttet til utviklingen av .NET Framework . Faktisk brukte Microsoft-ingeniører i de tidlige stadiene av utformingen av et rammeverk kalt SMC, eller Simple Managed C, et system som bruker C-språket på en administrert eller "administrert" måte. I januar 1999 satte Microsoft Anders Hejlsberg i spissen for en arbeidsgruppe med oppgaven å produsere et nytt språk, foreløpig kalt "Cool", et akronym for "C-like Object Oriented Language" [ 5] . Det definitive handelsnavnet ble C # ved Microsofts offisielle presentasjon av .NET-prosjektet på Professional Developers Conference i juli 2000 i Orlando , da ASP.NETs klassebiblioteker og kjøretid også ble konvertert til C #-språk.

Over tid har C # og Java tatt forskjellige veier, noe som øker de generelle gjensidige forskjellene, selv om det også har vært tydelige tilfeller av gjensidig utveksling av egenskaper. For eksempel bruker C #, i motsetning til Java, tingliggjøring siden versjon 2 for å generere generiske objekter som kan brukes som klasser, og reserverer selve kompileringen av koden når klassen lastes under kjøretid. Selv implementeringen på begge språkene av de generiske typene , selv om den er konseptuelt identisk, har blitt implementert ganske annerledes. I stedet ble C #-konseptet med boksing og unboxing senere implementert i Java [6] .

C # 1.0-versjonen, basert på .NET Framework 1.0, ble utgitt kommersielt av Microsoft i januar 2002 med utviklingspakken Visual Studio .NET 2002. Microsoft Visual Studio . [7]

C # versjon Innleveringsdato .NET-versjon Visuelt studio
1.0 januar 2002 1.0 Visual Studio .NET 2002
2.0 november 2005 2.0 Visual Studio .NET 2003
3.0 november 2007 2,0 / 3,5 Visual Studio 2008-2010
4.0 april 2010 4.0 Visual Studio 2010
5.0 august 2012 4.5 Visual Studio 2012-2013
6.0 juli 2015 4.6 Visual Studio 2015
7.0 mars 2017 4.6.2 Visual Studio 2017
7.1 august 2017 4.7 Visual Studio 2017 Ver.15.3
7.2 november 2017 4.7.1 Visual Studio 2017 Ver.15.5
7.3 mai 2018 4.7.2 Visual Studio 2017 Ver.15.7
8.0 september 2019 4.8 Visual Studio 2019
9,0 september 2020 5 Visual Studio 2019
10,0 november 2021 6 Visual Studio 2022

Språkets kjennetegn

C # er på en måte språket som best beskriver retningslinjene som hvert .NET -program kjører på. Faktisk ble den laget av Microsoft spesielt for programmering i .NET Framework . Dens "primitive" datatyper er unikt tilpasset .NET -typer, og mange av abstraksjonene, for eksempel klasser , grensesnitt , delegater og unntak , er godt egnet til å håndtere .NET - rammeverket.

Å definere C # i klassisk form som et tolket eller kompilert språk i klassisk forstand av begrepene er ganske komplisert. Faktisk er det begge deler på samme tid. Gitt den tette integrasjonen med .NET Framework , blir kildekoder skrevet i C# normalt kompilert i henhold til JIT- kriterier . I praksis utføres transformasjonen til maskinkode (dvs. utført direkte av CPU ) kun når programmet lastes og kjøres. I første omgang konverteres kildekoden av rammeverket til en mellomkode kalt CIL , og bare ved kjøring av programmet konverterer den spesifikke CLR for det brukte operativsystemet CIL til et spesifikt maskinspråk for vertsmaskinvaren , ettersom den kjøres . Dette betyr at kjøringen av koden kan være tregere ved første kjøring og deretter bli raskere. Videre blir progressive optimaliseringer av maskinkoden typisk utført under selve kompileringen, og produserer dermed en raskere og teoretisk "optimal" kode som kun utføres etter noen få komplette utførelse av den samme.

En annen mulighet er den såkalte Ngen-kompileringen , som lar deg konvertere all CIL-koden til maskinkode på én gang. Dette har fordelen av at utviklingsmiljøer som bruker C # kan distribueres på et hvilket som helst operativsystem når den spesifikke CLR er implementert .

Den grunnleggende syntaksen til C # er ofte veldig lik eller identisk med den for C, C ++ og Java-språkene. Noen av de grunnleggende funksjonene er:

Forskjeller fra C og C ++

Sammenlignet med C eller C ++ har C #-språket forskjellige endringer, hovedsakelig rettet mot å unngå typiske feil og tvetydigheter ved programmering i C-språk :

Forskjeller fra Java

Selv om C # antas å være lik Java , er det noen viktige forskjeller mellom de to språkene. Den mest synlige er absolutt tilstedeværelsen i C # av mange konstruksjoner, hvorav noen tydelig er avledet fra C ++ , som har blitt bevisst forbudt i Java . Tilhengere av C # hevder at dette gjør koden klarere, mens talsmenn for Java sier at tilstedeværelsen av et stort antall nøkkelord og regler å huske gjør språket vanskeligere å lære og bruke.

Andre merkbare forskjeller er følgende:

Funksjoner introdusert med oppdateringer

Versjon 3 Versjon 4 Versjon 5 [9]
  • Asynkrone metoder
  • Anropsinfo- attributter
Versjon 6 [10]
  • Kompilatortjeneste
  • Importere statiske medlemmer til navneområdet
  • Unntaksfiltre
  • Vent i fangst / endelig blokker
  • Automatiske eiendomsinitialiserere
  • Standardverdier for eksklusive getter- egenskaper
  • Uttrykksfylte medlemmer
  • Nullpropagator _
  • Strenginterpolasjon
  • Navn på operatør
  • Ordbok initialisering
Versjon 7 [11]
  • Binære bokstaver
  • Dekonstruktører
  • Sifferskillere
  • Lokale funksjoner
  • Brytertype _
  • Ref retur
  • Oppkalt tuppel
  • Ut går r
  • Mønstermatching
  • Vilkårlige asynkrone returer
  • Rekorder
  • Hent og sett i uttrykksdefinisjoner
  • Konstruktører og sluttbehandlere i uttrykksdefinisjoner
Versjon 8 [12]
  • Nullbare referansetyper
  • Standard grensesnittmedlemmer
  • Asynkrone strømmer
  • Bytt uttrykk
  • Lokale statiske funksjoner
  • Skrivebeskyttede strukturmedlemmer
  • Forbedring av interpolerte ordrett strenger
  • Forbedrede poster
  • Indekser og intervaller
  • Null-sammenslåingsoppdrag
Versjon 9 [13]
  • Utsagn på første nivå
  • Forbedringer av modelltilpasning
  • Jeg setter bare Init
  • Heltall i naturlig størrelse
  • Funksjonspekere
  • Anonyme statiske funksjoner
  • Lambdaavfallsparametere
  • Forbedrede poster
  • Attributter på lokale funksjoner
  • Nye funksjoner for delmetoder

Eksempler

Hei Verden!

Følgende eksempel viser teksten " Hello world " på konsollen.

bruker System ; klasse HelloWorldApp { public static void Main ( string [] args ) { Console . WriteLine ( "Hello World" ); Konsoll . ReadLine (); } }

I stedet skriver følgende eksempel ut teksten " Hallo verden " i en meldingsboks.

bruker System.Windows.Forms ; klasse HelloWorldApp { public static void Main () { MessageBox . Vis ( "Hello World" ); } }

Klassedefinisjon

Følgende eksempel definerer en klasse ved navn Person som eksponerer en Name -egenskap hvis verdi er lagret i variabelen mName :

bruker System ; navneområde Program { class Person { privat streng mName ; // hvis jeg ikke spesifiserer "privat" er det ingen forskjeller, fordi det er forstått. offentlig streng Navn { get { return mName ; } sett { mNavn = verdi ; } } } }

Det samme eksemplet kan skrives i en tilsvarende form ved å bruke syntaksen for automatiske egenskaper introdusert med versjon 3.0:

bruker System ; klasse Person { offentlig streng Navn { get ; sett ; } }

Det bør bemerkes at C#-språket er et syntaktisk verktøy for å bruke bibliotekene som finnes i Microsoft .NET Framework -navnerommene . Bortsett fra de interne strukturene til språket, må C #-programmereren referere til bibliotekene, også for I/O-administrasjonen, som faktisk i C og C++. Faktisk, i det første eksemplet som presenteres, brukes navneområdet System , hvorav WriteLine - metoden til Console -klassen vil bli brukt til å skrive "Hello World" på skjermen.

Kalkulator

Dette eksemplet viser en enkel kalkulator.

bruker System ; navneområde Kalkulator { class Program { static void Main ( string [ ] args ) { int Number1 = 0 , Number2 = 0 ; // Deklarer to tall og initialiser dem til 0. int Resultat ; // Variabel brukt for resultatet av de to tallene. røye Valg ; // Brukervalg refererte til alternativene i menyen. gjøre { Konsul . Fjern (); // Slett alle skriftene som finnes i konsollen. / * Meny * / Konsoll . WriteLine ( "Velkommen til kalkulatoren." ); // Skriver «Velkommen til kalkulatoren.» Til konsollen. Konsoll . WriteLine ( "1. Tillegg" ); // Skriv "1. Tillegg" til konsollen. Konsoll . WriteLine ( "2. Subtraksjon" ); // Skriv "2. Subtraksjon" til konsollen. Konsoll . WriteLine ( "3. Multiplikasjon" ); // Skriv "3. Multiplikasjon" til konsollen. Konsoll . WriteLine ( "4. divisjon" ); // Skriv til konsollen "4. Divisjon". Konsoll . WriteLine ( "5. Exit" ); // Skriv "5. Avslutt" til konsollen. Valg = Konsoll . ReadKey (). KeyChar ; // Brukerens valg er lagret i "Choice"-variabelen Konsoll . Fjern (); // Slett alle skriftene som finnes i konsollen. if ( Valg ! = '5' ) { Konsoll . Skriv ( "Sett inn det første tallet:" ); // Ber brukeren skrive inn det første tallet. Tall1 = Konverter . ToInt32 ( Konsoll . ReadLine ()); // Tildeler det første tallet som legges inn av brukeren til variabelen "Number1". Konsoll . Skriv ( "Sett inn det andre tallet:" ); // Ber brukeren angi det andre tallet. Tall2 = Konverter . ToInt32 ( Konsoll . ReadLine ()); // Tilordne det andre tallet angitt av brukeren til variabelen "Number2". } switch ( Valg ) // Med bryteren analyserer vi de ulike tilfellene av variabelens verdi. { case '1' : { Result = Number1 + Number2 ; // Resultatet av addisjonen havner innenfor "Resultat"-variabelen. Konsoll . WriteLine ( Number1 + "+" + Number2 + "=" + Resultat ); // Fortell brukeren resultatet. bryte ; // Avslutt bryteren umiddelbart for ikke å gjøre de andre tilfellene } case '2' : { Result = Number1 - Number2 ; // Resultatet av subtraksjonen havner innenfor "Resultat"-variabelen. Konsoll . WriteLine ( Number1 + "-" + Number2 + "=" + Resultat ); // Fortell brukeren resultatet. bryte ; // Avslutt bryteren umiddelbart for ikke å gjøre de andre tilfellene } case '3' : { Result = Number1 * Number2 ; // Resultatet av multiplikasjonen havner innenfor "Resultat"-variabelen. Konsoll . WriteLine ( Number1 + "*" + Number2 + "=" + Resultat ); // Fortell brukeren resultatet. bryte ; // Avslutt bryteren umiddelbart for ikke å gjøre de andre tilfellene } case '4' : { if ( Number2 ! = 0 ) // Divisjon med null er umulig så legg til en if { Result = Number1 / Number2 ; // Resultatet av divisjonen havner innenfor "Resultat"-variabelen. Konsoll . WriteLine ( Number1 + "/" + Number2 + "=" + Resultat ); // Fortell brukeren resultatet. } else { Konsoll . WriteLine ( Number1 + "/" + Number2 + "= Umulig!" ); // Umulig resultat } break ; // Avslutt bryteren umiddelbart for ikke å gjøre de andre tilfellene } case '5' : { break ; // Avslutt bryteren umiddelbart for ikke å gjøre de andre tilfellene } standard : { Console . WriteLine ( "Feil alternativ" ); bryte ; } } Konsoll . WriteLine ( "Trykk enter for å gå fremover" ); Konsoll . ReadKey (); } while ( Valg ! = '5' ); // Hvis betingelsen er sann, kjøres koden inne på nytt! } } }

Implementeringer

Referansekompilatoren er Microsoft Visual C # , en del av Microsoft Visual Studio -pakken og for øyeblikket åpen kildekode [14] .

Det finnes andre implementeringer på markedet og i åpen kildekode - kretser .

Mono

Mono - prosjektet implementerer en åpen kildekode - lisensiert C # -kompilator , en full åpen kildekode -implementering av CLI , eller Common Language Infrastructure , inkludert rammeverkbibliotekene som kreves av ECMA- spesifikasjonene, samt en nesten fullstendig implementering av .NET proprietære klassebiblioteker. oppdatert til versjon 3.5. Fram til versjon 2.6 av Mono er det ingen implementering av Windows Presentation Foundation ( WPF ), selv om det er planlagt for påfølgende utviklinger av Mono-plattformen. I tillegg er det for øyeblikket bare delvise implementeringer av LINQ til SQL og WCF planlagt .

DotGNU

DotGNU - prosjektet , som for øyeblikket ikke lenger støttes [15] , inkluderer en C #-kompilator, en delvis implementering av CLI , inkludert biblioteker som kreves i henhold til ECMA -spesifikasjonen , samt et undersett av noen Microsofts proprietære .NET -klassebiblioteker, oppdatert til versjonen .NET 2.0.

Rotor

Microsofts Rotor-prosjekt, distribuert gratis kun for utdannings- og forskningsformål, gir en implementering av CLR-runtime og en C #-kompilator, med et undersett av CLI-infrastrukturen i samsvar med ECMA-spesifikasjonen [16] .

Standardisering

I desember 2001 publiserte ECMA "ECMA-334 C # Language Specification" [17] .

C # ble en ISO-standard i 2003 ( ISO / IEC 23270 ) [18] .

Merknader

  1. ^ Hva er nytt i C # 10 , på docs.microsoft.com .
  2. ^ Navnet spiller på det faktum at C♯, på engelsk og andre språk, betegner musikknoten C skarp, en halvtone over "C", eller C (kilde: James Kovacs, C # /. NET History Lesson , på jameskovacs . com , 7. september 2007. Hentet 7. juni 2012 (arkivert fra originalen 21. august 2011) . ). Faktisk bør språknavnet skrives med det skarpe symbolet , men hash -tegnet brukes i stedet for å gjøre det lettere å skrive (kilde: MSDN , Visual C # FAQ ). På italiensk er ordspillet tapt.
  3. ^ Hvorfor Microsoft C # ikke er det , på cnet.com .
  4. ^ C # og Java: Sammenligning av programmeringsspråk , msdn.microsoft.com .
  5. ^ Naomi Hamilton, The AZ of Programming Languages: C # , i Computerworld , 1. oktober 2008. Hentet 4. februar 2017 .
  6. ^ Klaus Kreft og Angelika Langer, Etter Java og C # - hva er det neste? , på artima.com . Hentet 4. februar 2017 .
  7. ^ C # History , på docs.microsoft.com .
  8. ^ Covariance and Contravariance ( C #) , på MSDN .
  9. ^ En introduksjon til nye funksjoner i C # 5.0 , i The Microsoft MVP Award Program Blog . Hentet 4. februar 2017 .
  10. ^ Mark Michaelis, New and Improved C # 6.0 , på msdn.microsoft.com . Hentet oktober 2014 .
  11. ^ Språkfunksjonsstatus , på github.com . _ _
  12. ^ C # 8 News , på docs.microsoft.com .
  13. ^ C # 9 News , på docs.microsoft.com .
  14. ^ DonTen Roslyn-prosjektet på GutHub ,github.com .
  15. ^ DotGNU Project , på gnu.org . _
  16. ^ Rotor Project på MSDN , på msdn.microsoft.com .
  17. ^ ECMA-334 standard , på ecma-international.org .
  18. ^ http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=36768 Arkivert 8. mai 2012 på Internet Archive . - ISO-standardisering

Bibliografi

  • John Sharp, Microsoft Visual C # 2012 , Mondadori Informatica, 2014, s. 251, ISBN  978-88-6114-404-0 .
  • ( EN ) A. Boehm, J. Murach, Murach's C # 2015 , Mike Murach & Associates, 2016, s. 908, ISBN  978-1-890774-94-3 .
  • D. Bochicchio, C. Civera, M. De Sanctis, A. Leoncini, M. Leoncini, S. Mostarda, C # 6 og Visual studio 2015. Komplett guide for utvikleren , Hoepli Informatica, 2016, s. 456, ISBN  978-88-203-7099-2 .
  • Antonio Pelleriti, Programmering med C # 8. Komplett veiledning , LSWR-utgaver, 2019, s. 928, ISBN  978-88-68957698 .
  • ( EN ) A. Troelsen, P. Japikse, C # 6.0 and the .NET 4.6 Framework , Apress, 2016, s. 1625, ISBN  978-1-4842-1333-9 .
  • ( EN ) J. Albahari, B. Albahari, C # 6.0 in a Nutshell: The Definitive Reference , O'Reilly Media, 2016, s. 1136, ISBN  978-1-4919-2706-9 .
  • (IT) A. Pelleriti Programmering med C # 8, Digital Life Style, s. 243, ISBN 978-88-6895-769-8

Andre prosjekter

Eksterne lenker