Bevezetés
Lokális változó
Utasítások
C# nyelv alapjai Krizsán Zoltán
1
Általános Informatikai Tanszék Miskolci Egyetem Objektumorientált programozás C# alapokon tananyag
Bevezetés
Tartalom Bevezetés
Lokális változó
Utasítások
Lokális változó
Utasítások
Bevezetés
Lokális változó
Szójáték
I Why do all real Java programmers wear glasses? I Because they don't C#.
Utasítások
Bevezetés
Lokális változó
Utasítások
C# formalizmusa I A C, illetve az annak b®vítéseként deniált C++ szintaktikájával nagyon rokon.
I A továbbiakban az alapelemeket a C nyelvvel összehasonlítva ismertetjük.
I El®ször csak a C# nyelv legegyszer¶bb elemeivel foglalkozunk. I A leírás a legtöbb esetben nem teljes, de a C nyelv ismeretében egyszer¶ programok írásához elegend®.
I A hiányzó információkat a kés®bbiekben pótoljuk.
Bevezetés
Lokális változó
Utasítások
C# program I A C# program szigorúan osztályok halmaza. Végrehajtható kód csak osztály metódusában fordulhat el®.
I Egy alkalmazás belépési pontja egy olyan osztály, amelyben van egy
public static min®sítés¶ Main nev¶ metódus.
Ha
több van, akkor meg kell jelölni egy osztályt.
I A fenti fogalmak (osztály, metódus, min®sít®k) pontos jelentésére a kés®bbiekben kitérünk.
I Minden utasítást pontos vessz® zár. I A fájl neve és az osztály neve nem kell, hogy megegyezzen, s®t egy osztály több fájlban is lehet, és egy fájlban több osztály.
I A kiterjesztés megállapodás szerint .cs . I Fordítás a csc.exe xxx.cs nyelvi fordítóval. I Eredménye a xxx.exe vagy xxx.dll (kis várakozás után fut, hogy miért arról kés®bb lesz szó)
Bevezetés
Lokális változó
Utasítások
Azonosító I A C# Unicode karakterkészletet használja, tehát akár ékezetes azonosítókat is használhatunk.
I Az azonosító valamilyen elemet azonosít be (változó, konstans, metódus, ...) I I I I I I I
bet¶vel kezd®d® bet¶vel vagy számmal folytatódó karaktersorozat. Az _ és a $ is a bet¶k közé sorolandó. A bet¶k bármelyik karakterkészletb®l származhatnak. Az azonosító hossza tetsz®leges. A C# is kis- és nagybet¶ érzékeny (case sensitive). Kulcsszavak, valamint a foglalt szavak szavak nem lehetnek azonosítók.
Bevezetés
Lokális változó
Kulcsszavak, foglalt szavak abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum event explicit extern false nally fixed oat for foreach goto if implicit in int interface internal is lock long namespace new null object operator out override params private protected public readonly ref return sbyte sealed short sizeof stackalloc static string struct switch this throw true try typeof uint ulong unchecked unsafe ushort using virtual void volatile while
Utasítások
Bevezetés
Lokális változó
Utasítások
Kifejezés I 1 vagy több operandus és 0 vagy több operátor I Literál: olyan konstans, melynek nincs neve. I Operandus lehet bármilyen értéket adó valami : lokális változó, adattag, literál, konstans, fv. hívás visszatérési értéke.
I Kiértékelés menete nem változott.
Bevezetés
Lokális változó
Utasítások
Literál
Konstans, melynek nincs neve. I Logikai értékek: true vagy false. I A C-vel teljesen egyez® módon használandók: I I I I
Egész konstans Lebeg®pontos konstans Karakter konstans (az escape szekvenciák is!) Szöveg konstans (csak Unicode szöveget is tartalmazhat)
I A szöveg konstanst a fordító automatikusan String típusúként kezeli (magyarázat majd kés®bb).
Bevezetés
Lokális változó
Megjegyzés I Mint a C-ben: /* Szöveg */ I Egysoros: // Innent®l a sor végéig komment I Dokumentációs /// Tetsz®leges szöveg (a fordító xml-t hoz létre)
Utasítások
Bevezetés
Lokális változó
Utasítások
Lokális változó Alap tulajdonságok
I Deníciója csak metóduson belül. I Nincs globális változó! I Formája mint a C-ben, beleértve a kezd®értékadást is. I Egyszer¶ típusú lokális változó deníciója egyben helyfoglalást is jelent.
Bevezetés
Lokális változó
Utasítások
Lokális változó
C és C# lokális változó használatának különbségei Különbségek:
I Változó deníció egy metóduson belül bárhol lehet (nem csak blokk elején).
I A deníció tehát C#-ban végrehajtható utasítás! I
Következmény: az inicializáló kifejezés (ha van) tetsz®leges kifejezés lehet, csak a kifejezés értékének kell a deníció típusával kompatibilisnek lennie.
Bevezetés
Lokális változó
Utasítások
Lokális változó
I Természetesen a változó csak a deníció után használható. I A deníció hatásköre a deníciót tartalmazó blokk végéig tart. I
Kivétel: a for utasításban foglalt els® kifejezésben található deníció érvényességi köre a ciklusmag!
Bevezetés
Lokális változó
Lokális változó
Példa a lokális változó hatáskörére for (int index=1; index<8; index++) { System.out.println(index); byte i = index+65; System.out.println(i); } i és index egyaránt lokális a ciklusmagra nézve (tehát azon kívül nem használható!)
Utasítások
Bevezetés
Lokális változó
Utasítások
Lokális változó
Példakód magyarázata
I Mivel a
i deníciója ténylegesen a ciklusmag belsejében van,
így a ciklusmag minden végrehajtásakor létrejön, a végén pedig megsz¶nik.
I Az
index az ®t tartalmazó kifejezés kiértékelésekor létrejön, és
a ciklusból való kilépéskor megsz¶nik.
Bevezetés
Lokális változó
Utasítások
Lokális változó Hibaforrás
I Inicializálatlan lokális változó értéke határozatlan! I
Inicializálatlan változó használatát általában a fordító felismeri, és hibajelzéssel "jutalmazza".
Figyelem!
I a kés®bbiekben "osztály változókról" és "példány változókról" (adattagokról) is lesz szó!
Bevezetés
Lokális változó
Utasítás statement
I labeled-statement I declaration-statement I embedded-statement I I I I I I I I I I I
block empty-statement expression-statement selection-statement iteration-statement jump-statement try-statement checked-statement unchecked-statement lock-statement using-statement yield-statement
Utasítások
Bevezetés
Lokális változó
Utasítások
Deklarációs utasítás I A lokális változó és konstans deklaráció utasítás lett, így nem kell a blokk legelején használni.
I Hatáskörük az a blokk, ahol bevezették (annak a végén megsz¶nik).
I Csak blokkon belül.
Bevezetés
Lokális változó
Utasítások
Vezérl® utasítások I Lényegében megegyeznek a C utasításaival. I Különbségek: Az if, while, do utasításokban a feltétel csak logikai kifejezés lehet.
I A for utasításban a második kifejezés csak logikai kifejezés lehet.
I A switch utasításban a szelektor sbyte, byte, short, ushort, int, uint, long, ulong, char, string típusú kifejezés lehet.
Bevezetés
Lokális változó
Utasítások
Szelekciós utasítás switch (i) { default: CaseAny(); break; case 1:
CaseZeroOrOne();
goto default; case 0: CaseZero(); goto case 1; }
if (x) if (y) F(); else G(); // G() meghívódik, ha x igaz és y nem, else a hozzá legközelebb állóhoz
Bevezetés
Lokális változó
Utasítások
foreach utasítás foreach ( type identier in expression ) embedded-statement
I type identier : iterációs változó I
I
csak olvasható (fordítási hiba, ha változtatni akarjuk, nem lehetnek ref out paraméterek) csak beágyazott utasításban használható
I expression: eredménye egy gy¶jtemény kell legyen", aminek alaptípusa type I I
System.Collections.IEnumerable implementálja van GetEnumerator metódusa
I Az identier rendre felveszi a gy¶jtemény értékeit és lefuttatja a beágyazott kifejezést.
Bevezetés
Lokális változó
foreach utasítás
foreach (V v in x) embedded-statement {
E e = ((C)(x)).GetEnumerator();
try {
V v;
while (e.MoveNext()) { v = (V)(T)e.Current; embedded-statement }
} nally { }
}
? // Dispose e
Utasítások
Bevezetés
foreach utasítás III
Lokális változó
using System; class Test { static void Main() { double[,] values = { {1.2, 2.3, 3.4, 4.5}, {5.6, 6.7, 7.8, 8.9} }; foreach (double elementValue in values) Console.Write("{0} ", elementValue); Console.WriteLine(); } }
Utasítások
Bevezetés
Lokális változó
Ugró utasítások jump-statement:
I break-statement I continue-statement I goto-statement (ugrás címkére, nem javasolt) I return-statement I throw-statement (kivétel kezelés, majd kés®bb)
Utasítások
Bevezetés
Lokális változó
Túlcsordulást szabályzó utasítások I Integrális típusok m¶ködését befolyásolják I
I
aritmetikai operátorainak ++ - (unary) + - * / implicit numerikus konverziót
I van operátor megfelel®je is I checked bekapcsol (var rá fordító kapcsoló is /checked) I unchecked kikapcsol
Utasítások
Bevezetés
Lokális változó
Túlcsordulást szabályzó utasítások példa short x = 32767; short y = 32767;
// Max short value
short z = 0; try {
z = checked((short)(x + y)); } catch (System.OverflowException e) { System.Console.WriteLine(e.ToString()); }
Utasítások
Bevezetés
Lokális változó
Kölcsönös kizárás utasítás lock-statement:
lock ( expression ) embedded-statement 1. Bemegy a kritikus szakaszba (egyedül), zárolja mások belépését. 2. Lefuttatja a beágyazott kifejezést. 3. Kilép, és felengedi a zárolást.
System.Threading.Monitor.Enter(expression); try { embedded-statement } nally { System.Threading.Monitor.Exit(expression); }
Utasítások
Bevezetés
Lokális változó
Utasítások
Használó utasítás 1. Megkaparint 2. Használ 3. Felszabadít using (ResourceType resource = expression) embedded-statement
{
ResourceType resource = expression;
try {
embedded-statement }
nally { }
? // Dispose of resource }
Bevezetés
Lokális változó
Utasítások
Összefoglalás I Jelent®s változások a C szintaktikához képest (OOP kívül is). I Kényelmesebb használat. I Több szabály. I Szigorúbb, mint a C. I Számos egyszer¶sített utasítás.