Syntax för språket C Sharp

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 2 februari 2017; kontroller kräver 11 redigeringar .

Den här artikeln beskriver syntaxen för C# -språket . Den beskrivna syntaxen är helt kompatibel med syntaxen för C#-språket i .Net Framework och Mono .

Grunderna

Identifierare

Identifieraren  är namnet på enheten i koden . Det finns en standard för namngivning av identifierare som ska användas i kod. ID kan:

En identifierare kan inte:

Nyckelord

Nyckelord är fördefinierade reserverade identifierare som har en speciell syntaktisk betydelse. Språket har två typer av nyckelord - reserverade i valfri del av koden och kontextuella. Ord av den första typen, som false eller byte , kan bara användas som nyckelord. Ord av den andra typen, som ordet där , har en speciell betydelse endast i ett visst sammanhang och kan användas som identifierare utanför det. [MSDN 1] Om du fortfarande behöver använda nyckelordet som en identifierare måste du deklarera det med ett @-prefix, till exempel @byte . [MSDN 1]

Nyckelord C#
abstrakt som bas bool
ha sönder byte fall fånga
röding kontrollerade klass konst
Fortsätta decimal- standard delegera
do dubbel annan uppräkning
händelse explicit extern falsk
till sist fast flyta för
för varje gå till om implicit
i [MSDN 2] in (universell modifierare) [MSDN 3] int gränssnitt
inre är låsa lång
namnutrymme ny null objekt
operatör ut [MSDN 4] ut (generisk modifierare) [MSDN 5] åsidosätta
params privat skyddad offentlig
skrivskyddad ref lämna tillbaka sbyte
sluten kort storlek av stackalloc
statisk sträng struktur växla
detta kasta Sann Prova
sorts uint lång okontrollerad
osäker kort använder sig av virtuell
tomhet flyktig medan  
Kontextsökord C#
Lägg till dynamisk från skaffa sig
global grupp in i Ansluta sig
låta sortera efter partiell (typ) [MSDN 6] partiell (metod) [MSDN 7]
ta bort Välj uppsättning värde
var var (universell begränsning

typ) [MSDN 8]

där (frågeklausul) [MSDN 9] avkastning

Exempel:

sträng @ut ; //För att ge en identifierare ett namn som är identiskt med ett nyckelord, måste du använda @ -prefixet strängidentifierare ; //C# stöder Unicode och gör att identifierare kan namnges med vilken Unicode-teckensträng som helst var { get ; set ;}; //Du behöver inte använda prefixet @ här. var - kontext nyckelord public void function () { var s = "" ; //För att kompilatorn automatiskt ska bestämma typen av en variabel, används nyckelordet var }

Literals

Heltal
Hexadecimal 0xF5, 0x[0..9, A..F, a..f]+
Decimaler 245, [0..9]+
Flyttal
enda precision 23,5F, 23,5f; 1.72E3F, 1.72E3f, 1.72e3F, 1.72e3f
Dubbel precision 23,5, 23,5D, 23,5d; 1.72E3, 1.72E3D, ...
Datum
datumet Stöds inte
Symboler
symbol 'a', 'Z', '\u0231'
Strängar
linje "Hej världen"
"C:\\Windows\\" , @"C:\Windows\"
Escape-tecken [1]
Unicode teckenkod \u följt av teckenkod
tabbtecken _ \t
Plats \b
vagnretur \r
sidbrytning \f
snedstreck \\
enda citat \'
dubbelt citat \"
linjeöversättning \n

Variabler

En variabel är en identifierare som innehåller något värde. En variabel definieras av en typ och ett namn, och kan även initieras när den deklareras. Du kan bara deklarera variabler inuti funktioner.

Meddelande int variabel _ //Deklaration av en oinitierad heltalstypvariabel med namnet variabel Initiering int variabel _ //Deklaration av en oinitierad variabelvariabel = 1 ; //Variabelinitiering Deklaration och initiering int variabel = 1 ; //Samtidig deklaration och initialisering av en variabel

Du kan deklarera flera variabler av samma typ samtidigt:

int a , b ; int a = 2 , b = 3 ; Implicit typ Introducerad i C# 3.0

Om kompilatorn kan bestämma variabelns typ vid initiering kan den utelämnas genom att ersätta den med nyckelordet var  :

var chars = new char [] { 'A' , 'O' }; //konverterad av kompilatorn till char[] chars = nytt char[] {'A', 'O'}; var nummer = ny lista < int >(); //konverterad av kompilatorn till List<int>-tal = new List<int>();

se även

Konstanter

En konstant är en identifierare som innehåller ett värde som inte får ändras under programkörning. Konstanter är implicit statiska .

const

En lokal variabel eller egenskap med ett givet värde kan deklareras med nyckelordet const , varefter dess värde inte kan ändras.

klass Foo { const dubbel PI = 3,1415 ; Foo () { const int countOfPlanets = 9 ; } } readonly

En egenskap som deklareras med nyckelordet skrivskyddad , som en konstant, kan inte ändras efter initiering. Men till skillnad från ett fält med nyckelordet const kan det initieras i en konstruktor.

klass Foo { skrivskyddad int a = 3 ; skrivskyddad sträng b ; skrivskyddad StringBuilder- byggare ; Foo () { b = "Sträng" ; builder = new StringBuilder (); } }

Kodblock

Operatörer {...}används för att markera början och slutet av kodblock, samt för att indikera omfattning. En identifierare som deklareras inuti lockiga klammerparenteser är endast synlig inom dem och i kapslade omfång. Följande exempel visar hur ett kodblock och omfång fungerar:

void doSomething () { int a ; { int b ; a = 0 _ } a = 1 _ b = 1 ; //Kompilatorn kommer att kasta ett fel här, eftersom variabeln b deklareras i ett scope som inte är tillgängligt för denna kod. }

Programstruktur

Ansökningar skrivna i C# består av klasser och deras medlemmar. Klasser och andra typer deklareras i namnutrymmen, såväl som andra klasser.

namnområde FooNamespace { class Foo { class IncludedClass { } } }

Namnutrymmen

Namnutrymmet är en del av typnamnet. Används för att gruppera typer eller för att skilja mellan typer med samma namn men olika funktioner.

System . I.O. _ DirectoryInfo //Class DirectoryInfo i IO-namnområdet, som är kapslat i Systemnamnområdet

Namnutrymmet deklareras så här:

namnområdesapplikation { //Medlemmar är män } Nyckelord using

När du använder en klass är det inte nödvändigt att kvalificera dess namnområde om det är specificerat i .cs-filen med användningsdirektivet. Detta placeras vanligtvis överst i källfilen, men kan placeras någon annanstans, till exempel inom en klass.

använder System ; använder System.Collections ;

Direktivet usingtillåter dig också att skapa namnutrymme eller skriva alias, till exempel om dess namn är för långt:

använder Net = System . netto ; använder DirInfo = System . I.O. _ DirectoryInfo ;

Metod Main

Alla program, oavsett om det är konsol eller grafiskt, måste ha en ingångspunkt. I en C#-applikation är denna punkt metoden Main, som bara kan ha en instans och måste vara statisk. Denna metod kanske inte returnerar ett värde (sökord void):

static void Main ( sträng [] args ) { }

...eller returnera ett heltal som är programavslutskoden: om programmet avslutades utan fel är denna kod 0.

static int Main ( sträng [ ] args ) { return 0 ; }

Operatörer

Operatörskategori Operatörer
Aritmetisk + - * /  %
Boolean (boolesk och bitvis) & | ^  ! ~ && ||
Strängsammansättning +
öka, minska ++ --
Flytta << >>
Jämförelse ==  != < > <= >=
Uppdrag = += -= *= /=  %= &= |= ^= <<= >>=
Tillgång till medlemmar .
Indexering [ ]
Kasta ( )
Villkorlig ?  :
Skapa ett objekt new
Typ information as is sizeof typeof
Överflödeskontroll checked unchecked
Arbeta med pekare * -> [] &

Operatör överbelastning

Vissa operatörer kan vara överbelastade. För att överbelasta en operator måste du definiera en statisk funktion vars namn består av ett nyckelord operatoroch själva operatorn. För unära operatorer måste funktionen ha en parameter, för binära operatorer och jämförelseoperatorer två. I båda fallen måste en av parametrarna vara av samma typ som klassen eller strukturen som deklarerade den.

public static Foo operator +( Foo foo , Bar bar ) { return new Foo ( foo . Value + bar . Value ); }

Lista över överbelastade operatörer:

Operatörer
Unära operatörer + - ! ~ ++ -- true false
Binära operatorer + - * / % & | ^ << >>
Jämförelseoperatörer

kan endast överbelastas i par

== != < > <= >=
  • Tilldelningsoperatorer ( +=, *=och andra) kan inte överbelastas, men de är en kombination av operatorn ( =) och en av de binära operatorerna, och binära operatorer kan överbelastas.
  • Cast-operatorn ( ( )) kan inte överbelastas, men du kan definiera nya konverteringsoperatorer med explicit och implicit.
  • Arrayindexeringsoperatorn ( [ ]) kan inte överbelastas, men nya indexerare kan definieras.

se även

Konverterings- och cast-operatorer

Cast-operatorn kan inte överbelastas, men du kan definiera explicit konvertering (typ casting) operatorer - explicit och implicit konvertering - implicit. De skiljer sig åt genom att implicita konverteringsoperatörer inte får göra undantag och måste se till att informationen bevaras. [MSDN 10] . För en explicit omvandling måste du använda operatorn ( ), för en implicit gör du inte det.

Implicit konverteringsoperatör

class Foo { public string Value ; public static implicit operator Foo ( string value ) { return new Foo ( value ) } } //Implicit konvertering Foo foo = "Exempel" ;

Explicit konverteringsoperatör

class Foo { public string Value ; public static explicit operator Foo ( string value ) { if ( value . IsNullOrEmpty ()) throw new ArgumentException ( "Sträng kan inte vara null eller tom!" ); returnera ny Foo ( värde ) } } // Explicit konvertering Foo foo = ( Foo ) "Exempel" ; Foo fooNull = ( Foo ) "" ; //Fel Operatör as

Operatören asär en gjuten operatör. Om en typkonvertering är möjlig kommer operatören att returnera ett objekt av den angivna typen, annars returnerar den null.

Stream stream = Fil . Öppna ( @"C:\Temp\data.dat" ); FileStream fstream = streama som FileStream ; // Kommer att returnera ett objekt. String str = ström som String ; //Kommer att misslyckas och returnera null.

Operatör ??

Introducerad i C# 2.0

Om värdet på den vänstra variabeln är null, kommer värdet på den högra variabeln att returneras, annars kommer värdet på den vänstra variabeln att returneras.

Följande kod

returnera ifNotNullValue ?? annarsVärde ;

likvärdig

returnera ifNotNullValue == null ? annarsValue : ifNotNullValue ;

Anteckningar

Artiklar om MSDN
  1. 1 2 Nyckelord C# . Hämtad 4 januari 2011. Arkiverad från originalet 13 december 2010.
  2. föreach, i . Hämtad 4 januari 2011. Arkiverad från originalet 13 december 2010.
  3. in (universell modifierare) . Hämtad 4 januari 2011. Arkiverad från originalet 5 augusti 2010.
  4. Ut parametermodifierare . Hämtad 4 januari 2011. Arkiverad från originalet 15 december 2010.
  5. ut (universell modifierare) . Hämtad 4 januari 2011. Arkiverad från originalet 15 december 2010.
  6. Delad (typ) . Hämtad 4 januari 2011. Arkiverad från originalet 15 december 2010.
  7. Delad (metod) . Hämtad 4 januari 2011. Arkiverad från originalet 15 december 2010.
  8. där (generisk typbegränsning) . Hämtad 4 januari 2011. Arkiverad från originalet 15 december 2010.
  9. var klausul . Hämtad 4 januari 2011. Arkiverad från originalet 15 december 2010.
  10. implicit . Hämtad 6 januari 2011. Arkiverad från originalet 3 april 2011.
Övrigt
  1. Vilka teckenflyktsekvenser finns tillgängliga? . Hämtad 4 januari 2011. Arkiverad från originalet 28 maj 2010.