Syntaxe jazyka C Sharp

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 2. února 2017; kontroly vyžadují 11 úprav .

Tento článek popisuje syntaxi jazyka C# . Popsaná syntaxe je plně kompatibilní se syntaxí jazyka C# v .Net Framework a Mono .

Základy

Identifikátory

Identifikátor  je název entity v kódu . Existuje standard pro pojmenování identifikátorů, které by se měly používat v kódu. ID může:

Identifikátor nemůže:

Klíčová slova

Klíčová slova jsou předdefinované rezervované identifikátory, které mají speciální syntaktický význam. Jazyk má dva typy klíčových slov – vyhrazená v jakékoli části kódu a kontextová. Slova prvního typu, například false nebo byte , lze použít pouze jako klíčová slova. Slova druhého typu, jako je slovo where , mají zvláštní význam pouze v určitém kontextu a lze je použít jako identifikátory mimo něj. [MSDN 1] Pokud stále potřebujete použít klíčové slovo jako identifikátor, musíte ho deklarovat s předponou @, například @byte . [MSDN 1]

Klíčová slova C#
abstraktní tak jako základna bool
přestávka byte případ úlovek
char kontrolovány třída konst
pokračovat desetinný výchozí delegát
dělat dvojnásobek jiný enum
událost explicitní externí Nepravdivé
Konečně pevný plovák pro
pro každého jít do -li implicitní
v [MSDN 2] v (univerzální modifikátor) ​​[MSDN 3] int rozhraní
vnitřní je zámek dlouho
jmenný prostor Nový nula objekt
operátor out [MSDN 4] out (generický modifikátor) ​​[MSDN 5] přepsat
parametry soukromé chráněný veřejnost
pouze ke čtení ref vrátit se sbyte
zapečetěno krátký velikost stackalloc
statický tětiva strukturovat přepínač
tento házet skutečný Snaž se
Typ uint ulong nezaškrtnuté
nebezpečný ushort použitím virtuální
prázdnota nestálý zatímco  
Kontextová klíčová slova C#
přidat dynamický z dostat
globální skupina do připojit
nechat seřadit podle částečný (typ) [MSDN 6] částečná (metoda) [MSDN 7]
odstranit vybrat soubor hodnota
var kde (univerzální omezení

typ) [MSDN 8]

kde (dotazová klauzule) [MSDN 9] výtěžek

Příklady:

řetězec @out ; //Chcete-li dát identifikátoru název shodný s klíčovým slovem, musíte použít @ prefix string identifier ; //C# podporuje Unicode a umožňuje pojmenování identifikátorů libovolným znakovým řetězcem Unicode var { get ; nastavit ;}; //Zde nemusíte používat předponu @. var – kontextové klíčové slovo public void function () { var s = "" ; //K tomu, aby kompilátor automaticky určil typ proměnné, se používá klíčové slovo var }

Literály

Celá čísla
Hexadecimální 0xF5, 0x[0..9, A..F, a..f]+
Desetinná čísla 245, [0..9]+
Čísla s pohyblivou řádovou čárkou
jediná přesnost 23,5F, 23,5f; 1.72E3F, 1.72E3f, 1.72e3F, 1.72e3f
dvojitá přesnost 23,5, 23,5 D, 23,5 d; 1.72E3, 1.72E3D, ...
Termíny
datum Není podporováno
Symboly
symbol „a“, „Z“, „\u0231“
Struny
čára "Ahoj světe"
"C:\\Windows\\" , @"C:\Windows\"
Únikové postavy [1]
Unicode znakový kód \u následovaný kódem znaku
znak tabulátoru \t
prostor \b
návrat vozíku \r
konec stránky \F
obrácené lomítko \\
jediný citát \'
dvojitá citace \"
překlad řádků \n

Proměnné

Proměnná je identifikátor, který obsahuje nějakou hodnotu. Proměnná je definována typem a názvem a může být také inicializována, když je deklarována. Proměnné můžete deklarovat pouze uvnitř funkcí.

Oznámení proměnná int _ //Deklarace neinicializované proměnné typu celočíselné pojmenované proměnné Inicializace proměnná int _ //Deklarace neinicializované proměnné proměnné = 1 ; //Inicializace proměnné Deklarace a inicializace int proměnná = 1 ; //Současná deklarace a inicializace proměnné

Můžete deklarovat několik proměnných stejného typu najednou:

int a , b ; int a = 2 , b = 3 ; Implicitní typ Zavedeno v C# 3.0

Pokud kompilátor dokáže určit typ proměnné při inicializaci, lze ji vynechat nahrazením klíčovým slovem var  :

var chars = nový znak [] { 'A' , 'O' }; //převedeno kompilátorem na char[] chars = new char[] {'A', 'O'}; var čísla = new Seznam < int >(); //převedeno kompilátorem na List<int> čísla = new List<int>();

viz také

Konstanty

Konstanta je identifikátor, který obsahuje hodnotu, kterou není dovoleno měnit během provádění programu. Konstanty jsou implicitně statické .

const

Lokální proměnnou nebo vlastnost s danou hodnotou lze deklarovat pomocí klíčového slova const , po kterém nelze její hodnotu změnit.

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

Vlastnost deklarovaná klíčovým slovem jen pro čtení , jako konstanta, nelze po inicializaci změnit. Na rozdíl od pole s klíčovým slovem const jej však lze inicializovat v konstruktoru.

class Foo { readonly int a = 3 ; řetězec pouze pro čtení b ; pouze pro čtení StringBuilder builder ; Foo () { b = "String" ; builder = new StringBuilder (); } }

Bloky kódu

Operátory {...}se používají k označení začátku a konce bloků kódu a také k označení rozsahu. Identifikátor deklarovaný ve složených závorkách je viditelný pouze v nich a ve vnořených oborech. Následující příklad ukazuje, jak funguje blok kódu a rozsahy:

void doSomething () { int a ; { int b ; a = 0 _ } a = 1_ _ b = 1 ; //Kompilátor zde vyvolá chybu, protože proměnná b je deklarována v rozsahu, který není pro tento kód přístupný. }

Struktura programu

Aplikace napsané v C# se skládají z tříd a jejich členů. Třídy a další typy jsou deklarovány uvnitř jmenných prostorů, stejně jako ostatní třídy.

jmenný prostor FooNamespace { class Foo { class IncludedClass { } } }

Jmenné prostory

Jmenný prostor je součástí názvu typu. Používá se k seskupování typů nebo k rozlišení mezi typy se stejným názvem, ale různými funkcemi.

Systém . I.O. _ DirectoryInfo //Class DirectoryInfo v oboru názvů IO, který je vnořen do oboru názvů System

Jmenný prostor je deklarován takto:

jmenný prostor Aplikace { //Členové jsou muži } Klíčové slovo using

Při použití třídy není nutné kvalifikovat její jmenný prostor, pokud je uveden v souboru .cs pomocí direktivy using. To je obvykle umístěno v horní části zdrojového souboru, ale může být umístěno i jinde, například v rámci třídy.

pomocí System ; pomocí System.Collections ;

Direktiva také usingumožňuje vytvořit jmenný prostor nebo typové aliasy, například pokud je její název příliš dlouhý:

pomocí Net = System . síť ; pomocí DirInfo = System . I.O. _ DirectoryInfo ;

Metoda Main

Každá aplikace, ať už je to konzolová nebo grafická, musí mít vstupní bod. V aplikaci C# je tímto bodem metoda Main, která může mít pouze jednu instanci a musí být statická. Tato metoda nemusí vrátit hodnotu (klíčové slovo void):

static void Main ( string [] args ) { }

...nebo vrátí celé číslo, které je kódem ukončení programu: pokud program skončil bez chyby, je tento kód 0.

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

Operátoři

Kategorie operátora Operátoři
Aritmetický + - * /  %
Boolean (booleovský a bitový) & | ^  ! ~ && ||
Zřetězení řetězců +
zvýšit, snížit ++ --
Posun << >>
Srovnání ==  != < > <= >=
Úkol = += -= *= /=  %= &= |= ^= <<= >>=
Přístup k členům .
Indexování [ ]
Obsazení ( )
Podmiňovací způsob ?  :
Vytvořte objekt new
Typ Informace as is sizeof typeof
Kontrola přetečení checked unchecked
Práce s ukazateli * -> [] &

Přetížení operátora

Někteří operátoři mohou být přetíženi. Chcete-li přetížit operátor, musíte definovat statickou funkci, jejíž název se skládá z klíčového slova operatora samotného operátoru. U unárních operátorů musí mít funkce jeden parametr, u binárních a porovnávacích operátorů dva. V obou případech musí být jeden z parametrů stejného typu jako třída nebo struktura, která jej deklarovala.

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

Seznam přetížených operátorů:

Operátoři
Unární operátory + - ! ~ ++ -- true false
Binární operátory + - * / % & | ^ << >>
Porovnávací operátory

lze přetížit pouze ve dvojicích

== != < > <= >=
  • Operátory přiřazení ( +=, *=a další) nelze přetížit, ale jsou kombinací operátoru ( =) a jednoho z binárních operátorů a binární operátory mohou být přetíženy.
  • Operátor přetypování ( ( )) nelze přetížit, ale můžete definovat nové převodní operátory pomocí explicitních a implicitních.
  • Operátor indexování pole ( [ ]) nelze přetížit, ale lze definovat nové indexery.

viz také

Konverzní a přetypovací operátory

Operátor přetypování nelze přetížit, můžete však definovat operátory explicitní konverze (typové přetypování) - explicitní a implicitní konverze - implicitní. Liší se tím, že implicitní konverzní operátory nesmí vyvolávat výjimky a musí zajistit zachování informací. [MSDN 10] . Pro explicitní převod musíte použít operátor ( ), pro implicitní nikoli.

Operátor implicitní konverze

class Foo { public string Hodnota ; public static implicitní operátor Foo ( string value ) { return new Foo ( value ) } } //Implicitní konverze Foo foo = "Příklad" ;

Operátor explicitní konverze

class Foo { public string Hodnota ; public static explicitní operátor Foo ( string value ) { if ( value . IsNullOrEmpty ()) throw new ArgumentException ( "String nemůže být prázdný ani prázdný!" ); return new Foo ( value ) } } // Explicitní konverze Foo foo = ( Foo ) "Příklad" ; Foo fooNull = ( Foo ) "" ; //Chyba Provozovatel as

Operátor asje operátor obsazení. Pokud je převod typu možný, operátor vrátí objekt zadaného typu, jinak vrátí null.

Streamový proud = Soubor . Otevřít ( @"C:\Temp\data.dat" ); FileStream fstream = stream jako FileStream ; // Vrátí objekt. String str = proud jako String ; // Selže a vrátí hodnotu null.

Provozovatel ??

Představeno v C# 2.0

Pokud je hodnota levé proměnné null, pak bude vrácena hodnota pravé proměnné, jinak bude vrácena hodnota levé proměnné.

Následující kód

vrátit ifNotNullValue ?? jinakHodnota ;

ekvivalent

return ifNotNullValue == null ? jinakValue : ifNotNullValue ;

Poznámky

Články na MSDN
  1. 1 2 Klíčová slova C# . Získáno 4. ledna 2011. Archivováno z originálu 13. prosince 2010.
  2. foreach, v . Získáno 4. ledna 2011. Archivováno z originálu 13. prosince 2010.
  3. in (univerzální modifikátor) ​​. Získáno 4. ledna 2011. Archivováno z originálu 5. srpna 2010.
  4. Modifikátor výstupních parametrů . Získáno 4. ledna 2011. Archivováno z originálu 15. prosince 2010.
  5. out (univerzální modifikátor) ​​. Získáno 4. ledna 2011. Archivováno z originálu 15. prosince 2010.
  6. Sdílené (typ) . Získáno 4. ledna 2011. Archivováno z originálu 15. prosince 2010.
  7. Sdílené (metoda) . Získáno 4. ledna 2011. Archivováno z originálu 15. prosince 2010.
  8. where (obecné omezení typu) . Získáno 4. ledna 2011. Archivováno z originálu 15. prosince 2010.
  9. klauzule where . Získáno 4. ledna 2011. Archivováno z originálu 15. prosince 2010.
  10. implicitní . Získáno 6. ledna 2011. Archivováno z originálu dne 3. dubna 2011.
Různé
  1. Jaké sekvence escape znaků jsou k dispozici? . Získáno 4. ledna 2011. Archivováno z originálu 28. května 2010.