Szoftverfejlesztés .NET platformon - Jegyzet 1. fejezet
Ez az oldal a korábbi SCH wikiről lett áthozva.
Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!
Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.
<noautolink>
70-536 .NET Framework 2.0 Application Development Foundation
%TOC{depth="3"}%
Típusok
Érték típusok
Érték szerint adódnak át. Metódushíváskor az érték szerinti argumentumokból másolat keletkezik, a metódus futása során az eredeti érték nem változik.
- beépített egyszerű érték típus: érték szerint kerülnek átadásra
- fixpontos (egész), lebegőpontos, =Char=, =Boolean=, =IntPtr=, =DateTime=, ...
- deklarálás = létrehozás, nem kell =new=
- felsorolás = egymáshoz kapcsolódó szimbólumok halmaza
- növeli a kód olvashatóságát
- a szimbólumok belül
int
-ként vannak ábrázolva - deklaráció: =enum Kartyaszin : int { Treff, Karo, Kor, Pikk }=
- felhasználó által definiált érték típus: =struct=, pl. =System.Drawing.Point=
- logikailag egy érték
- legfeljebb 16 byte esetén érdemes használni
(a beépített struktúrák mind legfeljebb 16 byte-osak)
- tipikusan read-only
- akkor használják, ha nincs szükség érték-referencia típuskonverzióra
- deklaráció: =struct Point { int x,y; }=
- rendelkezhet konstruktorral és metódusokkal is
- =Nullable<típusnév> változónév=:
lehetővé teszi, hogy egy érték típus
null
-t vegyen föl
- C#-ban rövid jelölés: =típusnév? változónév=
- =HasValue=: van-e értéke
- =Value=: az érték
Referencia típusok
Pointer egy heap-ben tárolt adatra. A
System.Object
-ből származik. Felvehet
null
-t is. Metóduson belül megváltoztatható, a változást a hívó is látja. Az általa lefoglalt memória felszabadításáról a garbage collector gondoskodik.
Beépített referencia típusok
- =Object=
- =String=, =StringBuilder=. A =String= immutable (megváltoztathatalan).
Ha meg akarjuk változtatni, új példány jön létre.
Helyette
StringBuilder
-t érdemes használni.
- =Array=: tömbök közös ősosztálya. Alapból támogat néhány műveletet, pl. =Array.Sort()=
- =Exception=: hibás működés kezelése, számítani kell rá. Hibakezelés: =try - catch - finally=. A
finally
-ben nem érhetők el atry
-ban deklarált változók - =IO.Stream=: absztrakt stream osztály.
Leszármazottjai: =FileStream=, =MemoryStream=, =StreamReader=, =StreamWriter=.
Példa szöveges file olvasására hibakezeléssel:
try { TextReader tr = new StreamReader(locationTextBox.Text); try { displayTextBox.Text = tr.ReadToEnd(); } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { tr.Close(); } } catch (Exception ex) { MessageBox.Show(ex.Message); }
Öröklés
Öröklés = inheritance. Meglévő osztályt egészít ki újabb funkcionalitással.
- Egy ősosztályból, de akármennyi interfészből lehet örökölni.
- Interfész ~ szerződés, metódusok és property-k lehetnek benne. Pl.:
- =IComparable=: az osztály példányai összehasonlíthatók, rendezhetők
- =IDisposable=: ha egy objektum nem memóriajellegű erőforrást (pl. adatbázis kapcsolatot) foglal,
megszűnésekor kézzel kell felszabadítani a =Dispose()= metódusban.
- =IConvertible=: 17 metódus implementálásával lehetővé teszi az objektum konverzióját alap
típusokra.
- =IClonable=: objektum lemásolását teszi lehetővé
- =IEquatable=: két objektum egyenlőségét vizsgálja
- =IFormattable=: formázott stringgé konvertál
- Parciális osztály: 1 osztály kódja több file-ba van szétszedve.
Tipikus használat: generált és saját kód szétválasztása. 1.1-ben még nem volt.
- Generikus osztályok: osztály paraméterezése típussal. =System.Collection.Generic= névtér. Pl. =Dictionary=, =List=, =Queue=. Gyorsabb és elegánsabb kódot lehet írni. Fordítási időben történik meg a típusellenőrzés. Csak akkor fordul, ha az összes behelyettesíthető típusra értelmes a kód. A típusra megkötések adhatók meg:
- interfész: =where T: MyInterface=,
- ősosztály: =where T: BaseClass=,
- default konstruktor megléte: =where T: new()=,
- érték vagy referencia típus.
- többféle megkötés: =where T: BaseClass, new()=,
Események
Ugyanaz, mint 1.1-ben
- =delegate=: típusos metódus referencia
- =event=: objektum által küldött üzenet, aminek hatására meghívódnak az eseményre
beregisztrált eseménykezelők. Esemény deklarálása és kiváltása:
- =public delegate void MyEventHandler(object sender, EventArgs e);=
- =public event MyEventHandler MyEvent;=
- =if (MyEvent!=null) MyEvent(this, EventArgs.Empty);=
- az eseménykezelő szignatúrája megegyezik az eseményével
- első argumentuma (=object sender=) az eseményt kiváltó objektum
- második argumentuma =EventArgs= leszármazott, az esemény paramétereit tartalmazza
- regisztráció: esemény += eseménykezelő
public delegate void ValueChangedEventHandler(string message); public event ValueChangedEventHandler changeEvent; changeEvent += new ValueChangedEventHandler(metódusnév)
Attribútumok
Meta információ metódusra, típusra, osztályra, assemblyre. Lehetséges felhasználásai:
- biztonsági előírások definiálása
- képességek, pl. sorosítás deklarálása
- leíró adatok hozzáfűzése
Type forwarding: típus elhelyezése másik assemblybe (
A
→
B
), hogy az =A= névtérben lévő alkalmazásokat ne kelljen újrafordítani.
Típuskonverzió
- szűkítés (narrowing): C#-ban explicit konverzióval. Pl.
double
→int
- bővítés (widening): automatikus. Pl.
int
→double
- =IConvertible= interfész: 17 metódus, alap típusokra. Érvénytelen konverzió esetén
InvalidCastException
-t kell dobni. - =(cast)= operátor felüldefiniálása.
- =ToString()= felüldefiniálása, hiba esetén
Exception
-t kell dobni.- Alapból az osztály típusát adja vissza.
- Gyakran felüldefiniáljuk.
- =Parse()= felüldefiniálása, hiba esetén
Exception
-t kell dobni. - =TryParse()= felüldefiniálása, hiba esetén a visszatérési érték =false=.
Boxing - Unboxing
Érték és referencia típus közötti automatikus átalakítás. Kerülendő, amikor lehet.
- boxing: =int i=123; object o=(object)i;=
- unboxing: =object o=123; int i=(int)o;=
Elkerülése:
- generikus típusok használata
- struktúráknál az absztrakt metódusok (pl. =ToString()=) legyenek felüldefinálva
-- Peti - 2007.06.27.