Öröklés (c # programozási útmutató)

Az öröklés, a kapszulázással és polimorfizmussal együtt, az objektumorientált programozás három fő jellemzője (vagy alapvető fogalma). Az örökség lehetővé teszi új osztályok létrehozását, amelyek újrahasználják, kiterjesztik és módosítják a többi osztályban meghatározott viselkedést. Egy olyan osztály, amelynek tagjai örökölnek, alap osztálynak nevezik. és az osztályt, amely ezeket a tagokat örökölti, a származtatott osztálynak nevezzük. A származtatott osztálynak csak egy azonnali alaposztálya lehet. Az öröklés azonban átmeneti. Ha a ClassC a ClassB osztályból származik, és a ClassB ClassA-ból származik, a ClassC örökli a Class B és ClassA osztályban deklarált tagokat.

A struktúrák nem támogatják az öröklést, de képesek interfészeket megvalósítani. További információ: Interfészek (C # programozási útmutató).

Koncepcionálisan a származtatott osztály az alap osztály szakosodása. Például, ha van egy állati alap osztály. Lehetséges, hogy van egy származtatott osztály, amit emlősnek hívnak. és egy másik származtatott osztály, a Hüllő. Az állat az állatok és a hüllő állati. de minden származtatott osztály az alap osztály különböző szakterületeit reprezentálja.

Amikor egy osztályt örököl egy másik osztályból, akkor a származtatott osztály kifejezetten megkapja az alap osztály összes tagját, kivéve konstruktőröket és destruktorokat. A származtatott osztály tehát újrahasznosíthatja a kódot az alap osztályban anélkül, hogy újratelepítené. Egy származtatott osztályban további tagokat adhat hozzá. Így a származtatott osztály kiterjeszti az alap osztály funkcionalitását.

Az alábbiakban a WorkItem osztály látható. amely az üzleti folyamat munkaterületét képviseli. Mint minden osztályhoz, az objektumból származik és örökölte az összes metódust. A WorkItem öt tagja van. Ez magában foglalja a konstruktort, mivel a konstruktorok nem öröklődnek. A ChangeRequest osztály öröklődik a WorkItem-ből, és egy bizonyos típusú munkaelemet képvisel. A ChangeRequest további két tagot ad a WorkItem és Object által örökölt tagoknak. Hozzá kell adnia saját konstruktort, és hozzá kell adnia az eredetiItemID-t. Az eredetiItemID tulajdonság lehetővé teszi a ChangeRequest példány társítását az eredeti WorkItem objektumhoz. amelyre a változtatási kérelmet alkalmazták.

Öröklés (c # programozási útmutató)

Az alábbi ábra bemutatja, hogy az előző példában szereplő osztályok közötti kapcsolatok C #-ben fejeződnek ki. A következő példa azt is mutatja, hogy a WorkItem felülírja a virtuális Object.ToString metódust. és hogyan változik a ChangeRequest osztály a WorkItem módszer végrehajtását.

Amikor az alaposztály virtuálisnak nyilvánítja a módszert. A származtatott osztály felülbírálhatja a saját implementációjú módszert. Ha az alaposztály absztraktként deklarálja a tagot. akkor ezt a módszert újra kell definiálni minden olyan nem absztrakt osztályban, amely közvetlenül örökölte ezt az osztályt. Ha a származtatott osztály önmagában is elvont, akkor az elvont fogalmakat örökli anélkül, hogy rájönne. Az absztrakt és virtuális kifejezések a polimorfizmus alapja, amely az objektum-orientált programozás második fő jellemzője. További információ: Polymorphism (C # Programming Guide).

Egy osztályt absztraktként deklarálhat. ha meg szeretné akadályozni a példányok közvetlen létrehozását az új kulcsszóval. Ezzel a megközelítéssel egy osztály csak akkor használható, ha az új osztály abból származik. Az absztrakt osztály tartalmazhat egy vagy több olyan aláírásmintát, amelyek maguk is elvontnak minősülnek. Ezek az aláírások megadják a paramétereket és értéket adnak vissza, de nincs végrehajtásuk (metódus-test). Az elvont osztálynak nem kell absztrakt tagokat tartalmaznia; Ha azonban az osztály még absztrakt kifejezést tartalmaz, akkor magát az osztályt absztraktnak kell nyilvánítani. Az elvont osztályok, amelyek önmagukban nem absztraktak, végrehajtást kell nyújtaniuk absztrakt alaposztály absztrakt módszereihez. További információkért lásd: Kivonat és zárt osztályok és osztálytagok (C # programozási útmutató).

Az interfész referenciatípus, hasonlóan absztrakt alaposztályhoz, amely csak absztrakt tagokból áll. Ha egy osztály egy interfészt valósít meg, akkor minden interfész tagnak végre kell hajtania. Számos interfész megvalósítható egy osztályban, bár csak egy közvetlen alaposztályból származhat.

Az interfészeket olyan képességek definiálására használják, amelyek nem feltétlenül azonosítói. Például az IE-kompatibilis interfészt bármely osztály vagy struktúra megvalósíthatja, amely ügyfélkódot tartalmaz, hogy meghatározza a két típusú objektum egyenértékűségét (azonban a típus az egyenértékűséget határozza meg). Az IEkalmazható nem jelenti ugyanazt a személyazonossági kapcsolatot, amely létezik az alap és a származtatott osztályok között (például az emlős állati). További információ: Interfészek (C # programozási útmutató).

A származtatott osztályból elérhetők az alap osztály nyitott, védett, belső és védett belső tagjai. Bár a származtatott osztály örökli az alap osztály privát tagjait, nem férhet hozzá ezekhez a tagokhoz. Mindazonáltal mindezek a magánszemélyek továbbra is jelen vannak a származtatott osztályban, és ugyanazt a feladatot végezhetik, mint az alap osztályban. Tegyük fel például, hogy egy védett alapkategóriás módszer hozzáférést biztosít egy privát mezőhöz. Ennek a mezőnek jelen kell lennie a származtatott osztályban az örökölt alap-osztály módszerének helyes működéséhez.

Kapcsolódó cikkek