13. rész

Kezelése számos eltérő osztályok nehéz. Meg lehet kezelni összeállítása és besorolásának osztályok ezzel a problémával. ötvözi közös számos osztálya ingatlan ugyanabban az osztályban, és használja, mint a bázis. Ez a lehetőség biztosítja a mechanizmust az örökséget.
Öröklés esetén alkalmazható az alábbi, egymással összefüggő célokat.
1) kizárása programok ismételt kódrészletek;
2) egyszerűsítés modifikációs programot;
3) megkönnyíti az új programok alapján a meglévőket.
Ezen felül. Öröklés egy egyedülálló lehetőség, hogy használják a lehetőségeket. forráskód nem elérhető. de szeretné, hogy a változások.
Amellett, hogy öröklés ebben a szakaszban, megbeszéljük olyan fontos OOP fogalmak, mint a polimorfizmust és a beágyazás. amelyek szintén részt vesz a kialakulását az osztály hierarchia.
Emlékezzünk szintaxis.
[Attribútumok] [selejtező] class osztály nevét _ [: ős]
A leírásban a szülő osztály nevét az osztály meg van írva a fejlécben a kettőspont után. Osztály. amely örökölt. Ez az úgynevezett bázis. Osztály. örökli. Ez az úgynevezett származékos. A származtatott osztály örökli az összes változó. módszereket. tulajdonságait. üzemeltetők és indexers. meghatározott alap osztály. mellett. egyedi elemek adhatunk a származtatott osztály. vagy újra meglévők. Ha az ős neve nincs kifejezetten megadva. úgy vélik, hogy az őse az alap osztály valamennyi adattípusok C #, t. e. típusától bject.
Tekintsük a példát öröklési osztályok geometriai formák. A PointPlane hozzon létre egy osztály (egy pont a síkban), mint az alap osztály és származtatott osztály, mint a
PointPlane - class PointSpace (egy térbeli pontban):
using System; névtér MyProgram
public class PointPlane // alap osztály - egy pont a síkon
public int x; public int y; public void Show ()
Console.WriteLine ( "(,)", x, y);
int y = (int) ob; // Unboxing Console.WriteLine ( "y =", y);
A program eredményeként töredék.
Esetünkben a következő parancsot megengedett lesz.
PointPlane pont = új PointSpace (1,2,3);
Sőt. t. Hogy. Az objektum típus az alapja az összes adattípust. Ez akkor válik érvényessé, a következő parancsokat.

objektum OB1 = új PointPlane (4, 5); objektum OB2 = új PointSpace (6, 7, 8);
Hiba történik, ha megpróbálja alkalmazni a módszert Show. Például. csapat
ahelyett, hogy a várt (1, 2, 3) fogja mutatni (1, 2). Egy csapat.
Soha nem lesz képes eleget tenni. t. Hogy. Az objektum osztály megjelenítése módszer nincs definiálva.
Nézzünk szembe a tényekkel. Ezért ahelyett, hogy (1, 2, 3) van (1, 2). Ahogy azt már korábban említettem. Minden módszer egy osztály egykópiájú a memóriában, és használják az összes tárgyat az azonos osztályba együtt. Ez a döntés teljesen logikus. mert ha már 1000 PointPlane objektum típusát, majd 1000-szer ismétlődő kód megjelenítése eljárás nincs értelme.
Ennek eredményeként. abban az esetben az ügyfélnek a hivatkozás osztály objektum PointPlane PointSpace konfliktus van két tábla között a módszerek - az alap osztály és osztály - leszármazottja.
Ahogy a leszármazottai a szülő osztály is sok (beleértve a leszármazottai a harmadik és a magasabb szint), és keresés az összes lehetséges módszereit táblázatok meglehetősen hosszadalmas folyamat. a fordító mondja. hogy. hacsak másként nincs feltüntetve. táblázatban. amely megkeresi a módszert. Ez határozza meg a típusát egy objektum referenciát. Annak érdekében, hogy világosan jelzik, hogy szükség van, hogy megtalálja a megfelelő módszert az objektum típusát. ahelyett linkeket. tervezők használt virtuális és elvont, és a megjelölt módszerek nevezik őket virtuális és elvont, rendre.
Virtuális módszer - a módszer. amely deklarált az alap osztály a kulcsszó virtuális, majd felülírható egy származtatott osztály a kulcsszó felülírás. Ugyanakkor. ha végre örökséget. például többszintű. minden származtatott osztály lehet saját verzióját a virtuális módszer.
Módosított módszerével megjelenítése osztályba PointPlane PointSpace, és figyelembe véve az elhangzottakat.
nyilvános virtuális void Show () // az osztály PointPlane
Console.WriteLine ( "(,)", x, y);
nyilvános override void Show () // az osztály PointSpace
Console.WriteLine ( "(,,)", x, y, z);
Most tekintsük a következő kódrészletet.
PointPlane [] tömb = új PointPlane [6]; array [0] = new PointPlane ();
array [1] = new PointPlane (1);

array [2] = new PointPlane (2, 3); array [3] = new PointSpace (); array [4] = new PointSpace (4); array [5] = new PointSpace (5, 6, 7); foreach (PointPlane db tömb)
A program eredményeként töredék.
(0, 0, 0) (4, 4, 4) (5, 6, 7)
Így. polimorfizmus segítségével. egy referencia változó a szülő osztály utalhat Különböző típusú objektumok. valamint használja ugyanazt a nevet más műveletre.
Add a szülő osztály virtuális módszer PointPlane távolság, amely lehetővé teszi, hogy kiszámítja a távolságot a származási egy adott pontban. Újra meghatározza a származtatott osztály PointSpace tekintve. hogy az a pont, meg a térben. Mutassa be a működését ezzel a módszerrel.
Abstract Módszerek és osztályok
Néha hasznos, hogy hozzon létre egy alap osztályt. esetben csak egyfajta „üres forma”, amely örökli az összes származtatott osztályokban. mindegyikük fogja tölteni a „forma” saját adatait. Ez az osztály határozza meg a szerkezete módszerek. amely származó osztályon kell végrehajtani. de az osztály maga nem nyújt végrehajtását ezeket a módszereket. Ilyen helyzet állhat elő akkor. ha a szülő osztály egyszerűen nem tudják végrehajtani az eljárást. Ebben a helyzetben, a fejlett absztrakt módszereket.
vagy teljes absztrakt osztályok.
Egy absztrakt módszert ismertet a specifikáló absztrakt. Ő nem a test és. ezért. nem valósult meg az alap osztály. és a származtatott osztályokban felülírják szükségessé. Az absztrakt módszer automatikusan virtuális és a virtuális, hogy egy selejtező nem szükséges. Sőt. ha megpróbálja használni mindkét specifikátor (absztrakt és virtuális) ugyanabban az időben. a fordító hibaüzenetet generál.
Ha egy osztály legalább egy absztrakt módszer. azt is be kell jelenteni, mint elvont. alkalmazásával specifikátor absztrakt osztály előtt. Mint egy absztrakt osztály nem valósult meg teljesen. lehetetlen, hogy hozzon létre egy példányt az osztály segítségével a műtét

új. Például. Ha a Demo osztály definíciója elvont. A kísérlet, hogy hozzon létre egy példánya a Demo hibát okoznak.
Demo a = új Demo ();
Azonban, akkor létrehozhat egy sor hivatkozásokat. amelynek típusa megegyezik egy absztrakt osztály.
Demo [] Ob = új Demo [5];
Ha a származtatott osztály örökli az elvont. meg kell teljesen felülírja az összes elméleti módszerek az alap osztály. vagy szintén fel lehet tüntetni elvont. Így. absztrakt specifikátor öröklődik eddig. míg a származtatott osztály, nem minden absztrakt módszerek fogják végrehajtani.
Tekintsük a példa a használatára absztrakt módszerek és osztályok.
using System; névtér MyProgram
absztrakt public class Point // absztrakt osztály
absztrakt public void Show (); elvont állami kettős távolság ();
PointPlane és PointSpace.
using System; névtér MyProgram
public class PointPlane: Point
védett int x; védett int y;
nyilvános PointPlane (int a)