Om C #

C # [notat 2] er et multi-paradigm programmeringssprak som omfatter sterk skrive, imperativ, deklarativ, funksjonell, generisk, objektorientert (klassebasert) og komponentorienterte programmeringsdisipliner. Det ble utviklet av Microsoft innen .NET-initiativet og senere godkjent som standard av Ecma (ECMA-334) og ISO (ISO / IEC 23270: 2006). C # er et av programmeringssprakene som er designet for Common Language Infrastructure.

C # er ment a v re et enkelt, moderne, generelt formal, objektorientert programmeringssprak. [8] Utviklingslaget sitt ledes av Anders Hejlsberg. Den nyeste versjonen er C # 6.0, som ble utgitt 20. juli 2015. [9]

Design mal.

ECMA-standarden viser disse designmalene for C #: [8]

C # -spraket er ment a v re et enkelt, moderne, generelt formal, objektorientert programmeringssprak. Spraket og implementeringen av dette skal gi stotte til programvareteknikkprinsipper som sterk typekontroll, kontroll av arraygrenser, deteksjon av forsok pa a bruke uninitialiserte variabler og automatisk soppelsamling. Programvare robusthet, holdbarhet og programmerer produktivitet er viktig. Spraket er ment for bruk i utvikling av programvarekomponenter som er egnet for distribusjon i distribuerte miljoer. B rbarhet er sv rt viktig for kildekode og programmerere, spesielt de som allerede er kjent med C og C ++. Stotte til internasjonalisering er sv rt viktig. C # er ment a v re egnet til a skrive applikasjoner for bade vert og innebygde systemer, alt fra de store som bruker sofistikerte operativsystemer, ned til de sv rt sma som har dedikerte funksjoner. Selv om C # -programmene er ment a v re okonomiske med hensyn til minne- og prosesskravkrav, var ikke spraket ment a konkurrere direkte pa ytelse og storrelse med C eller monteringssprak.

Under utviklingen av .NET Framework, ble klassebibliotekene opprinnelig skrevet ved hjelp av et administrert kodesamlingssystem kalt Simple Managed C (SMC). [10] [11] I januar 1999 dannet Anders Hejlsberg et lag for a bygge et nytt sprak pa den tiden som kalles Cool, som stod for «C-like Object Oriented Language & # 8221 ;. [12] Microsoft hadde vurdert a holde navnet & # 8220; Cool & # 8221; som det siste navnet pa spraket, men valgte ikke a gjore det av varemerker. Da NET-prosjektet ble offentliggjort i juli 2000Professional Developers Conference, hadde spraket fatt navnet C #, og klassebibliotene og ASP.NET runtime hadde blitt sendt til C #.

C # s hoveddesigner og ledende arkitekt hos Microsoft er Anders Hejlsberg, som tidligere var involvert i designet av Turbo Pascal, Embarcadero Delphi (tidligere CodeGear Delphi, Inprise Delphi og Borland Delphi) og Visual J ++. I intervjuer og tekniske artikler har han uttalt at feil i de fleste store programmeringssprak (f.eks. C ++, Java, Delphi og Smalltalk) kjorte grunnleggende i Common Language Runtime (CLR), som i sin tur kjorte designet av selve C # spraket.

James Gosling, som skapte Java-programmeringsspraket i 1994, og Bill Joy, en medgrunnlegger av Sun Microsystems, opphavsmannen til Java, kalte C # an & # 8220; imitation & # 8221; av Java; Gosling sa videre at & # 8220; [C # er] slags Java med palitelighet, produktivitet og sikkerhet slettet. & # 8221; [13] [14] Klaus Kreft og Angelika Langer (forfattere av en C + + -strommer-bok) oppgav i et blogginnlegg at «Java og C #» er nesten identiske programmeringssprak. Kjedelig gjentakelse som mangler innovasjon, & # 8221; [15] & # 8220; Ingen vil pasta at Java eller C # er revolusjonerende programmeringssprak som forandret maten vi skriver programmer pa, og & # 8220; C # lant mye fra Java & # 8211; og vice versa. Na som C # stotter boksing og unboxing, har vi en veldig lignende funksjon i Java. & # 8221; [16] I juli 2000 sa Anders Hejlsberg at C # ikke er en Java klon & # 8221; og er & # 8220; mye n rmere C ++ & # 8221; i sin design. [17]

Siden utgivelsen av C # 2.0 i november 2005 har C # og Java-sprak utviklet seg pa stadig mer divergerende baner, og blir noe mindre like. En av de forste store avgangene kom med tillegg av generikk til begge sprak, med vesentlig forskjellige implementeringer. C # bruker verifikasjon for a gi forste klasse & # 8221; Generiske objekter som kan brukes som alle andre klasser, med kodegenerering utfort pa klasselastetid. [18] Videre har C # lagt til flere viktige funksjoner for a imotekomme funksjonell programmering, som kulminerer i LINQ-utvidelsene som er utgitt med C # 3.0 og dets stottende rammeverk for lambda-uttrykk, utvidelsesmetoder og anonyme typer. [19] Disse funksjonene gjor det mulig for C # programmerere a bruke funksjonelle programmeringsteknikker, for eksempel lukkinger, nar det er fordelaktig a bruke dem. LINQ-utvidelsene og funksjonell import hjelper utviklere a redusere mengden av & # 8220; boilerplate & # 8221; kode som er inkludert i vanlige oppgaver som a sporre en database, analysere en xml-fil, eller soke gjennom en datastruktur, skift vekten pa den faktiske programlogikken for a forbedre lesbarheten og vedlikeholdbarheten. [20]

C # pleide a ha en maskot som heter Andy (oppkalt etter Anders Hejlsberg). Den ble pensjonert 29. januar 2004. [21]

C # ble opprinnelig sendt til ISO-underkomiteen JTC 1 / SC 22 for gjennomgang, [22] under ISO / IEC 23270: 2003, [23] ble trukket tilbake og ble deretter godkjent under ISO / IEC 23270: 2006. [24]

Navnet & # 8220; C skarpt & # 8221; ble inspirert av musikalsk notasjon, hvor en skarp indikerer at den skrevne notatet skal gjores en halvton hoyere i tonehoyde. [25] Dette ligner spraketavnet til C ++, hvor & # 8220; ++ & # 8221; indikerer at en variabel skal okes med 1. Det skarpe symbolet ligner ogsa en ligatur pa fire & # 8220; + & # 8221; symboler (i et to-to-to-grid), noe som inneb rer at spraket er en okning pa C ++. [26]

Pa grunn av tekniske begrensninger pa displayet (standardfonter, nettlesere, etc.) og det faktum at det skarpe symbolet (U + 266F musikkskarpskilt (HTML & # 9839;)) ikke er tilstede pa standardtastaturet, U + 0023 # tallskilt (HTML & # 035;)) ble valgt for a representere det skarpe symbolet i det skrevne navnet pa programmeringsspraket. [27] Denne konvensjonen gjenspeiles i ECMA-334 C # Spesifikasjon. [8] Nar det er praktisk a gjore det (for eksempel i reklame eller i boksekunst [28]), bruker Microsoft det tilsiktede musikalske symbolet.

Den & # 8220; skarpe & # 8221; suffiks har blitt brukt av en rekke andre .NET-sprak som er varianter av eksisterende sprak, inkludert J # (et .NET-sprak ogsa designet av Microsoft som er avledet fra Java 1.1), A # (fra Ada) og det funksjonelle programmeringsspraket F # . [29] Den opprinnelige implementeringen av Eiffel for .NET ble kalt Eiffel #, [30] et navn pensjonert siden hele Eiffel-spraket stottes na. Suksessen har ogsa blitt brukt til biblioteker, for eksempel Gtk # (en. NET wrapper for GTK + og andre GNOME-biblioteker) og Cocoa # (en wrapper for kakao).

Generelle typer [34] Delvise typer [34] Anonyme metoder [34] Iteratorer [34] Nullable typer [34] Getter / setter separat tilgjengelighet [34] Metodegruppekonverteringer (delegater) [34] Co- og kontraavvik for delegater [34] ] Statiske klasser [34] Delegatets innflytelse [34]

Implisitt skrevne lokale variabler [35] Objekt- og samlingsinitiatorer [35] Auto-implementerte egenskaper [35] Anonyme typer [35] Forlengelsesmetoder [35] Sokeuttrykk [35] Lambda-uttrykk [35] Ekspresjonstrender [35] Delvise metoder [36] ]

Dynamisk binding [37] Navngitte og valgfrie argumenter [37] Generisk co- og contravariance [37] Embedded interop types (& # 8220; NoPIA & # 8221;) [37]

Asynkrone metoder [38] Caller info attributter [38]

Kjernesyntaxen i C # -spraket ligner pa andre C-stil sprak som C, C + + og Java. Spesielt:

Semikoloner brukes til a betegne slutten av en uttalelse. Krollete parentes brukes til a gruppere uttalelser. Uttalelser blir ofte gruppert i metoder (funksjoner), metoder i klasser og klasser i navneomrader. Variabler er tilordnet ved a bruke et like-tegn, men sammenlignet med to pafolgende likeverdige tegn. Square parentes brukes med arrayer, bade for a deklarere dem og a fa en verdi pa en gitt indeks i en av dem.

Distinguishing funksjoner.

Noen bemerkelsesverdige trekk ved C # som skiller den fra C, C ++, og Java der det er nevnt, er:

B rbarhet [rediger]

Med design er C # programmeringsspraket som mest reflekterer den underliggende Common Language Infrastructure (CLI). [41] De fleste av dens innebygde typer samsvarer med verdivyper implementert av CLI-rammene. Sprakspesifikasjonen angir imidlertid ikke kodens generasjonskrav til kompilatoren: det betyr ikke at en C # -kompilator ma malrette en Common Language Runtime, eller generere Common Intermediate Language (CIL), eller generere et annet bestemt format. Teoretisk sett kan en C # compiler generere maskinskode som tradisjonelle kompilatorer av C ++ eller Fortran.

C # stotter kraftig typede implisitte variable deklarasjoner med sokeordet var, og implisitt skrevet arrays med sokeordet ny [] etterfulgt av en samling initialiserer.

C # stotter en streng boolsk datatype, bool. Uttalelser som tar forhold, for eksempel nar og hvis, krever et uttrykk for en type som implementerer den sanne operatoren, for eksempel den boolske typen. Mens C ++ ogsa har en boolsk type, kan den konverteres fritt til og fra heltall, og uttrykk som hvis (a) bare krever at a kan konverteres til bool, slik at a kan v re en int, eller en peker. C # tillater dette & # 8220; heltall som betyr ekte eller falsk & # 8221; tiln rming, med den begrunnelse at tvinger programmerere til a bruke uttrykk som returnerer noyaktig bool, kan forhindre visse typer programmeringsfeil som om (a = b) (bruk av oppgave = i stedet for likestilling ==, som ikke er en feil i C eller C ++ , vil bli fanget av kompilatoren uansett).

C # er mer trygt enn C ++. De eneste implisitte konverteringene som standard er de som anses a v re sikre, som for eksempel utvidelse av heltall. Dette handheves pa kompileringstid, underJIT, og i noen tilfeller ved kjoretid. Ingen implisitte konverteringer forekommer mellom boolesker og heltall, heller ikke mellom opptelling medlemmer og heltall (unntatt bokstavelig 0, som kan bli implisitt konvertert til en oppnadd type). Enhver brukerdefinert konvertering ma v re eksplisitt merket som eksplisitt eller implisitt, i motsetning til C + + kopi-konstruktorer og konvertering operatorer, som begge er implisitt som standard.

C # har eksplisitt stotte for kovarians og contravariance i generiske typer, i motsetning til C ++ som har en viss grad av stotte for contravariance rett og slett gjennom semantikken til returtyper pa virtuelle metoder.

Opptelling medlemmer er plassert i eget omfang.

C # -spraket tillater ikke globale variabler eller funksjoner. Alle metoder og medlemmer ma deklareres i klasser. Statiske medlemmer av offentlige klasser kan erstatte globale variabler og funksjoner.

Lokale variabler kan ikke skygge variabler i omsluttende blokk, i motsetning til C og C ++.

Meta programmering.

Meta programmering via C # attributter er en del av spraket. Mange av disse attributter dupliserer funksjonaliteten til GCC & # 8217; s og VisualC ++ ‘s plattformavhengige preprocessor-direktiver.

Metoder og funksjoner.

Som C ++, og i motsetning til Java, ma C # programmerere bruke sokeordet virtuelt for a tillate at metoder overstyres av underklasser.

Forlengelsesmetoder i C # tillater programmerere a bruke statiske metoder som om de var metoder fra en klassetabell, slik at programmerere kan legge til metoder til et objekt som de mener burde eksistere pa det objektet og dets derivater.

Type-dynamikken gjor det mulig for bindetidsmetoden a binde, slik at man kan bruke JavaScript-lignende metodeanrop og sammensatt kjoretidsobjekt.

C # har stotte for sterkt typede funksjonspekere via sokeorddelegatet. Som Qt-rammeverkets pseudo-C + + -signal og –spor har C # semantikk som omhandler publiseringsabonnementstilhendelser, selv om C # bruker delegater til a gjore det.

C # tilbyr Java-lignende synkroniserte metallsamtaler, via attributtet [MethodImpl (MethodImplOptions.Synchronized)], og har stotte for gjensidig eksklusive laser via sokeordlas.

C # gir egenskaper som syntaktisk sukker for et vanlig monster der et par metoder, accessor (getter) og mutator (setter) innkapsler operasjoner pa en enkelt attributt av en klasse. Ingen redundante metode underskrifter for getter / setter implementeringer ma skrives, og egenskapen kan nas ved hjelp av attributt syntaks i stedet for flere verbose metallsamtaler.

Et C # -navneomrade gir det samme nivaet av kodeisolering som en Java-pakke eller et C ++-navneomrade, med sv rt liknende regler og funksjoner til en pakke.

Minne tilgang.

I C # kan minneadressepunktene bare brukes i blokker som er spesielt merket som usikre, og programmer med usikre kode trenger nodvendige tillatelser til a kjore. De fleste objekttilgang er gjort gjennom sikre objektreferanser, som alltid enten peker pa en & # 8220; live & # 8221; objekt eller ha den veldefinerte nullverdien; det er umulig a fa en referanse til en & # 8220; dod & # 8221; objekt (en som har blitt soppel samlet), eller til en tilfeldig blokk med minne. En usikker peker kan peke pa en forekomst av en verdi-type, array, streng eller en blokk med minne som er allokert pa en stabel. Kode som ikke er merket som usikre, kan fortsatt lagre og manipulere pekere gjennom System.IntPtr-typen, men det kan ikke dekke dem.

Behandlet minne kan ikke eksplisitt frigjores; I stedet blir det automatisk soppel samlet. Innsamling av soppel adresserer problemet med hukommelsesslekkasje ved a frigjore programmoren med ansvar for a frigjore minne som ikke lenger er nodvendig.

Sjekket unntak er ikke tilstede i C # (i motsetning til Java). Dette har v rt en bevisst beslutning basert pa problemene med skalerbarhet og versjonsevne. [42]

Polymorfisme.

I motsetning til C ++ stotter C # ikke flere arv, selv om en klasse kan implementere et hvilket som helst antall grensesnitt. Dette var en designbeslutning av sprakets ledende arkitekt for a unnga komplikasjoner og forenkle arkitektoniske krav gjennom hele CLI. Nar du implementerer flere grensesnitt som inneholder en metode med samme signatur, tillater C # a implementere hver metode avhengig av hvilket grensesnitt denne metoden kalles gjennom, eller, som Java, tillater implementering av metoden en gang, og at det er den ene anropet pa en samtale gjennom noen av klassens grensesnitt.

I motsetning til Java stotter C # operator overbelastning. Bare de mest overbelastede operatorene i C ++ kan v re overbelastet i C #.

Funksjonell programmering.

Selv om det prim rt var et imperativt sprak, tilbod C # 2.0 begrenset stotte til funksjonell programmering gjennom forsteklasses funksjoner og nedleggelser i form av anonyme delegater. C # 3.0 utvidet stotte for funksjonell programmering med innforing av en lettvekts syntaks for lambda-uttrykk, utvidelsesmetoder (et bud pa moduler) og en syntese for listeforstaelse i form av en sporringsforstaelse & # 8221; Sprak.

Vanlig type system.

C # har et enhetlig type system. Dette enhetlige typesystemet kalles Common Type System (CTS). [43]

Et enhetlig type system inneb rer at alle typer, inkludert primitiver som heltall, er underklasser av systemet. Objeklasse. For eksempel arver hver type en ToString () -metode.


Vil du spille i det beste kasinoet? Vi fant det for deg. Registrer deg nå!