A C Sharp nyelv szintaxisa

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt hozzászólók, és jelentősen eltérhet a 2017. február 2-án felülvizsgált verziótól ; az ellenőrzések 11 szerkesztést igényelnek .

Ez a cikk a C# nyelv szintaxisát írja le . A leírt szintaxis teljes mértékben kompatibilis a .Net Framework és a Mono C# nyelv szintaxisával .

Alapok

Azonosítók

Az azonosító a kódban szereplő entitás  neve . Az azonosítók elnevezésére létezik egy szabvány, amelyet a kódban kell használni. Az azonosító:

Az azonosító nem tud:

Kulcsszavak

A kulcsszavak előre meghatározott lefoglalt azonosítók, amelyeknek különleges szintaktikai jelentése van. A nyelvnek kétféle kulcsszója van – a kód bármely részében fenntartott és kontextus szerinti. Az első típusú szavak, például false vagy byte , csak kulcsszóként használhatók. A második típusú szavak, mint például a where szó , csak bizonyos kontextusban bírnak különleges jelentéssel, és azon kívül is használhatók azonosítóként. [MSDN 1] Ha továbbra is azonosítóként kell használnia a kulcsszót, akkor azt @ előtaggal kell deklarálnia, például @byte . [MSDN 1]

Kulcsszavak C#
absztrakt mint bázis bool
szünet byte ügy fogás
char ellenőrizve osztály const
folytatni decimális alapértelmezett küldött
csináld kettős más enum
esemény kifejezett külső hamis
végül rögzített úszó számára
az egyes menj ha beleértett
[ MSDN 2] in (univerzális módosító) [MSDN 3] int felület
belső van zár hosszú
névtér új nulla tárgy
operátor ki [MSDN 4] out (általános módosító) [MSDN 5] felülbírálni
params magán védett nyilvános
csak olvasható ref Visszatérés sbyte
zárt rövid mérete stackalloc
statikus húr struct kapcsoló
ez dobás igaz próbálja meg
típusú uint ulong ellenőrizetlen
nem biztonságos short segítségével virtuális
üres illó míg  
Kontextusbeli kulcsszavak C#
add hozzá dinamikus tól től kap
globális csoport -ba csatlakozik
hagyja Rendezés részleges (típus) [MSDN 6] részleges (módszer) [MSDN 7]
távolítsa el válassza ki készlet érték
var ahol (univerzális megkötés

típus) [MSDN 8]

ahol (lekérdezési záradék) [MSDN 9] hozam

Példák:

string @out ; //Ha egy azonosítónak egy kulcsszóval azonos nevet szeretne adni, akkor a @ előtag karakterlánc azonosítóját kell használnia ; //C# támogatja a Unicode kódot, és lehetővé teszi az azonosítók elnevezését tetszőleges Unicode karakterlánccal var { get ; set ;}; //Itt nem szükséges a @ előtag használata. var - kontextus kulcsszó public void function () { var s = "" ; //Ahhoz, hogy a fordító automatikusan meghatározza a változó típusát, a var kulcsszót használja }

Literálok

Egész számok
Hexadecimális 0xF5, 0x[0..9, A..F, a..f]+
Tizedesjegyek 245, [0..9]+
Lebegőpontos számok
egyetlen pontosság 23,5F, 23,5f; 1,72E3F, 1,72E3f, 1,72e3F, 1,72e3f
dupla pontosság 23,5, 23,5 d, 23,5 d; 1.72E3, 1.72E3D, ...
Dátumok
dátum Nem támogatott
Szimbólumok
szimbólum „a”, „Z”, „\u0231”
Húrok
vonal "Hello, world"
"C:\\Windows\\" , @"C:\Windows\"
Escape karakterek [1]
Unicode karakterkód \u karakterkód követi
tabulátor karakter \t
tér \b
kocsi vissza \r
oldaltörés \f
fordított perjel \\
egyetlen idézet \'
kettős idézet \"
soros fordítás \n

Változók

A változó egy azonosító, amely valamilyen értéket tartalmaz. A változókat típus és név határozza meg, és deklarálásakor inicializálható is. Csak függvényeken belül deklarálhat változókat.

Hirdetmény int változó _ //Változó nevű inicializálatlan egész típusú változó deklarálása Inicializálás int változó _ //Inicializálatlan változóváltozó deklarálása = 1 ; //Változó inicializálása Deklaráció és inicializálás int változó = 1 ; //Változó egyidejű deklarálása és inicializálása

Egyszerre több azonos típusú változót is deklarálhatunk:

int a , b ; int a = 2 , b = 3 ; Implicit típus Bevezetve a C# 3.0 -ban

Ha a fordító az inicializáláskor meg tudja határozni a változó típusát, akkor ez kihagyható, ha a var kulcsszóra cseréli  :

var chars = új karakter [] { 'A' , 'O' }; //fordító által char[]-ra konvertálva chars = new char[] {'A', 'O'}; var számok = new Lista < int >(); //a fordító átalakította List<int> számokká = new List<int>();

Lásd még

Konstansok

A konstans olyan azonosító, amely olyan értéket tartalmaz, amely nem módosítható a program végrehajtása során. A konstansok implicit módon statikusak .

const

Adott értékű lokális változó vagy tulajdonság a const kulcsszóval deklarálható , ami után az értéke nem módosítható.

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

A csak olvasható kulcsszóval deklarált tulajdonság , mint egy konstans, inicializálás után nem módosítható. A const kulcsszóval rendelkező mezőkkel ellentétben azonban konstruktorban inicializálható.

class Foo { csak olvasható int a = 3 ; csak olvasható karakterlánc b ; csak olvasható StringBuilder építő ; Foo () { b = "Karakterlánc" ; builder = új StringBuilder (); } }

Kódblokkok

Az operátorok {...}a kódblokkok elejét és végét, valamint a hatókör jelzését szolgálják. A kapcsos zárójelekben deklarált azonosító csak azokon belül és beágyazott hatókörökben látható. A következő példa bemutatja, hogyan működik egy kódblokk és hatókör:

void doSomething () { int a ; { int b ; a = 0_ _ } a = 1_ _ b = 1 ; //A fordító itt hibát fog dobni, mert a b változó olyan hatókörben van deklarálva, amely nem elérhető ennek a kódnak. }

Programstruktúra

A C# nyelven írt pályázatok osztályokból és azok tagjaiból épülnek fel. Az osztályok és más típusok a névtereken belül deklaráltak, valamint más osztályok.

névtér FooNamespace { class Foo { class IncludedClass { } } }

Névterek

A névtér a típusnév része. A típusok csoportosítására vagy az azonos nevű, de eltérő funkciójú típusok megkülönböztetésére szolgál.

Rendszer . I.O._ _ DirectoryInfo //Class DirectoryInfo az IO névtérben, amely a System névtérbe van beágyazva

A névtér a következőképpen van deklarálva:

névtér Alkalmazás { //A tagok férfiak } Kulcsszó using

Osztály használatakor nem szükséges a névterét minősíteni, ha a .cs fájlban a using direktívával van megadva. Ez általában a forrásfájl tetejére kerül, de máshol is elhelyezhető, például egy osztályon belül.

a rendszer használatával ; a System.Collections használatával ;

Ezenkívül az irányelv usinglehetővé teszi névterek létrehozását vagy álnevek beírását, például ha a neve túl hosszú:

a Net = System használatával . háló ; a DirInfo = System használatával . I.O._ _ DirectoryInfo ;

Módszer Main

Minden alkalmazásnak, legyen az konzolos vagy grafikus, rendelkeznie kell belépési ponttal. Egy C#-alkalmazásban ez a pont a metódus Main, amelynek csak egy példánya lehet, és statikusnak kell lennie. Előfordulhat, hogy ez a módszer nem ad vissza értéket (kulcsszó void):

static void Main ( string [ ] args ) { }

...vagy adjon vissza egy egész számot, amely a program kilépési kódja: ha a program hiba nélkül kilépett, ez a kód 0.

static int Main ( string [ ] args ) { return 0 ; }

Operátorok

Üzemeltetői kategória Üzemeltetők
Számtan + - * /  %
Logikai (logikai és bitenkénti) & | ^  ! ~ && ||
Karakterlánc összefűzése +
növekedés, csökkenés ++ --
Váltás << >>
Összehasonlítás ==  != < > <= >=
Feladat = += -= *= /=  %= &= |= ^= <<= >>=
Hozzáférés a tagokhoz .
Indexelés [ ]
Öntvény ( )
Feltételes ?  :
Hozzon létre egy objektumot new
Írja be az Információt as is sizeof typeof
Túlcsordulás ellenőrzése checked unchecked
Munka mutatókkal * -> [] &

Kezelői túlterhelés

Néhány kezelő túlterhelt lehet. Egy operátor túlterheléséhez meg kell határoznia egy statikus függvényt, amelynek neve egy kulcsszóból operatorés magából az operátorból áll. Unáris operátorok esetén a függvénynek egy paraméterrel kell rendelkeznie, bináris és összehasonlító operátorok esetén kettő. Mindkét esetben az egyik paraméternek ugyanolyan típusúnak kell lennie, mint az azt deklaráló osztály vagy struktúra.

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

A túlterhelt operátorok listája:

Üzemeltetők
Unáris operátorok + - ! ~ ++ -- true false
Bináris operátorok + - * / % & | ^ << >>
Összehasonlító operátorok

csak párban lehet túlterhelni

== != < > <= >=
  • A hozzárendelési operátorok ( +=, *=és mások) nem terhelhetők túl, de ezek az operátor ( =) és az egyik bináris operátor kombinációja, és a bináris operátorok túlterhelhetők.
  • A cast operátor ( ( )) nem terhelhető túl, de definiálhat új konverziós operátorokat explicit és implicit használatával.
  • A tömb indexelő operátora ( [ ]) nem terhelhető túl, de új indexelők definiálhatók.

Lásd még

Konverziós és cast operátorok

A cast operátort nem lehet túlterhelni, azonban definiálhatunk explicit konverziós (type casting) operátorokat - explicit és implicit konverzió - implicit. Abban különböznek egymástól, hogy az implicit konverziós operátoroknak nem szabad kivételt tenniük, és biztosítaniuk kell az információk megőrzését. [MSDN 10] . Explicit konverzióhoz az operátort kell használni ( ), implicit konverzióhoz nem.

Implicit konverziós operátor

class Foo { public string Érték ; public static implicit operator Foo ( string value ) { return new Foo ( érték ) } } //Implicit konverzió Foo foo = "Példa" ;

Explicit konverziós operátor

class Foo { public string Érték ; public static explicit operátor Foo ( string value ) { if ( érték . IsNullOrEmpty ()) throw new ArgumentException ( "A karakterlánc nem lehet null vagy üres!" ); return new Foo ( érték ) } } // Explicit konverzió Foo foo = ( Foo ) "Példa" ; Foo fooNull = ( Foo ) "" ; //Hiba Kezelő as

Az operátor asöntött operátor. Ha lehetséges a típuskonverzió, akkor az operátor a megadott típusú objektumot adja vissza, ellenkező esetben a null.

Stream stream = Fájl . Megnyitás ( @"C:\Temp\data.dat" ); FileStream fstream = adatfolyam FileStreamként ; _ // Egy objektumot ad vissza. String str = stream mint String ; //Nem működik, és nullát ad vissza.

Kezelő ??

Bevezetve a C# 2.0 -ban

Ha a bal oldali változó értéke null, akkor a jobb oldali változó értéke, ellenkező esetben a bal oldali változó értéke.

Következő kód

return ifNotNullValue ?? egyébkéntValue ;

egyenértékű

return ifNotNullValue == null ? elseValue : ifNotNullValue ;

Jegyzetek

Cikkek az MSDN-ről
  1. 1 2 Kulcsszavak C# . Letöltve: 2011. január 4. Az eredetiből archiválva : 2010. december 13..
  2. foreach, in . Letöltve: 2011. január 4. Az eredetiből archiválva : 2010. december 13..
  3. in (univerzális módosító) . Letöltve: 2011. január 4. Az eredetiből archiválva : 2010. augusztus 5..
  4. Out paraméter módosító . Letöltve: 2011. január 4. Az eredetiből archiválva : 2010. december 15.
  5. out (univerzális módosító) . Letöltve: 2011. január 4. Az eredetiből archiválva : 2010. december 15.
  6. Megosztott (típus) . Letöltve: 2011. január 4. Az eredetiből archiválva : 2010. december 15.
  7. Megosztott (módszer) . Letöltve: 2011. január 4. Az eredetiből archiválva : 2010. december 15.
  8. ahol (általános típusú megszorítás) . Letöltve: 2011. január 4. Az eredetiből archiválva : 2010. december 15.
  9. ahol záradék . Letöltve: 2011. január 4. Az eredetiből archiválva : 2010. december 15.
  10. implicit . Letöltve: 2011. január 6. Az eredetiből archiválva : 2011. április 3..
Vegyes
  1. Milyen karaktersorozatok állnak rendelkezésre? . Letöltve: 2011. január 4. Az eredetiből archiválva : 2010. május 28..