C # programmeringsspråk | |
---|---|
Forfatter | Anders Hejlsberg |
Opprinnelsesdato | 2000 |
Siste versjon | 10,0 [1] |
Bruk | Generisk |
Paradigmer | Multiparadigme: strukturert , imperativ , objektorientert , funksjonell , hendelsesdrevet |
Skriving | Statisk , Dynamisk , Sterk , Trygg |
Vanlige utvidelser | .cs, .csproj |
Påvirket av | Delphi , C++ , Java , Eiffel , Haskell , ML |
Det påvirket | D , F # , Java , TypeScript |
Referanseimplementering | |
Nettsted | docs.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 .
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 |
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:
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 :
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:
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" ); } }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.
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! } } }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 - 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 - 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.
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] .
I desember 2001 publiserte ECMA "ECMA-334 C # Language Specification" [17] .
C # ble en ISO-standard i 2003 ( ISO / IEC 23270 ) [18] .