Úvod k nahradeniu metód v C #
Zjednodušenie znamená, že je možné zmeniť správanie metód. Všetci vieme o virtuálnej funkcii v jazyku C ++, v ktorej vyvoláme funkciu zo základnej triedy v odvodenej triede. Prepísanie metód v C # poskytuje podobné privilégium ako virtuálna funkcia v C ++. Napríklad vtáky budú mať rovnaké atribúty ako muchy, farba atď. Rôzne vtáky však budú mať iný spôsob lietania a farba sa bude líšiť v závislosti od vtáka. Metódy základnej triedy Bird tak môžeme prepísať v odvodených triedach, ako je papagáj, vrabec, vrana atď.
Ako používať funkciu Overriding v jazyku C #?
Predpokladajme, že naša aplikácia má požiadavku na zmenu správania metódy základnej triedy v odvodenej triede, potom by sme mali ísť o prepísanie metódy. Aby sme to dosiahli, musíme v odvodenej triede vytvoriť metódu s rovnakým podpisom v základnej triede, aby sme mohli vykonať inú úlohu. Predtým, ako sa naučíme používať prevažujúcu techniku, musíme mať na pamäti nasledujúce body.
- V programovaní C # sa metóda Overriding nazýva aj polymorfizmus runtime, oneskorená väzba alebo dynamický polymorfizmus.
- Je možné iba metódu odvodených tried. Pretože metóda je v odvodenej triede zo základnej triedy prepísaná.
- Metóda by mala byť nevirtuálnou alebo statickou metódou nahradenia.
- Modifikátor úrovne prístupu pre metódu prepísania a virtuálnu metódu by mal byť rovnaký.
Metóda, ktorá je potlačená deklaráciou prepísania, sa nazýva prepísaná základná metóda. Toto bude prítomné v základnej triede. Prepísaná základná metóda môže byť abstraktná, prepísaná alebo virtuálna. Nová implementácia nazývaná metóda prepísania sa zdedí od tejto základnej triedy.
Na potlačenie metód používame rôzne kľúčové slová. Oni sú,
1) Virtuálne kľúčové slovo
My kompilátor narazí na virtuálne kľúčové slovo v programe, chápe, že táto metóda môže byť potlačená ktoroukoľvek z jej odvodených tried. Štruktúra je uvedená nižšie.
public virtual int EnemyHealth()
(
Console.WriteLine("Enemy Health");
)
2) Prepísať kľúčové slovo
Toto je prítomné v odvodenej triede. Kompilátorovi oznámi, že táto metóda má prednosť pred metódu s rovnakým menom a podpisom v základnej triede.
public override int EnemyHealth ()
(
Console.WriteLine("Enemy 1");
)
príklad
Najprv sa pozrime na príklad bez použitia kľúčového slova Virtual a override.
kód:
class Birds
(
public void Color( )
(
Console.WriteLine("Birds will have different Colors");
)
)
class Parrot:Birds
(
public void Color( )
(
Console.WriteLine("Parrot is Green");
)
)
class ExecutionClass
(
public static void Main( )
(
Birds object;
object = new Birds( );
object .Color( );
object = new Parrot( );
object.Color( );
)
)
Výkon:
Vo vyššie uvedenom príklade sme vytvorili objekt triedy Derived Parrotand a jeho referenciu sme uložili do referenčnej premennej objektu Birds.
V ďalšom kroku pomocou referenčnej premennej vyvoláme funkciu Color (). Pretože objekt obsahuje odkaz na objekt typu Parrot, je prirodzené, že očakávame vykonanie funkcie Color () triedy Parrot. Ale mýlime sa. Krása programovania nedovolí, aby sa to stalo.
Na naše prekvapenie je vykonaná metóda Color () triedy Birds. Je to preto, že funkcia je vyvolaná na základe typu odkazu a nie na to, na čo odkazuje objekt referenčnej premennej. Pretože objekt je odkazom na typ Birds, vyvolá sa funkcia Color () triedy Birds, bez ohľadu na to, na ktorý objekt sa odkazuje.
Teraz prepíšme ten istý program virtuálnym a prepíšem. Tentoraz pôjdeme krok za krokom, aby sme lepšie porozumeli.
Vytvorte základnú triedu s ľubovoľným menom. Tu používam Birds. Napíšte metódu s virtuálnym kľúčovým slovom. Toto bude naša prepísaná metóda, ktorú prepíšeme v zdedenej triede. Do tejto metódy napíšte správu, ktorá sa má vytlačiť v konzole.
class Birds
(
public virtual void Color( )
(
Console.WriteLine("Birds will have different Colors");
)
)
Teraz vytvorte ešte jednu triedu Papagáj. Tentoraz ju zdedíme zo základnej triedy, ktorú sme vytvorili predtým, tj Birds. Na zdedenie používame symbol „:“.
trieda Papagáj: Vtáky
Tu napíšete funkciu s prepísaním kľúčového slova a napíšete nejakú správu. Skontrolujte, či sa názov metódy a podpis v odvodenej triede zhodujú s názvom metódy a podpisom v základnej triede.
public override void Color ( )
(
Console.WriteLine("Parrot is Green");
)
Potrebujeme ešte jednu triedu, aby sme mohli vykonať túto funkciu, aby sme skontrolovali prvoradosť. Vytvorte triedu s ľubovoľným menom. Vo vnútri napíšte hlavnú funkciu.
class ExecutionClass
(
public static void Main( )
(
)
)
Vytvorte objekt nadradenej triedy a aktivujte funkciu pomocou objektu triedy. Vyvolá to metódu Color prítomnú v triede Birds.
Birds object;
object = new Birds( );
object .Color( );
Teraz vytvorte objekt odvodenej triedy a zavolajte metódu Color. Vyvolá to metódu Color triedy Parrot.
object = new Parrot( );
object.Color( );
Dokážete uhádnuť výstup, keď spustíme program? Toto je uvedené nižšie.
Výkon:
Prepísanie kľúčových slov a virtuálne umožňuje vyvolať metódy základnej triedy a odvodené metódy triedy v ľubovoľnom okamihu samostatne, aj keď sú názvy a podpisy metód rovnaké.
záver
V tomto článku sme pochopili prvoradú metódu, potrebu prvoradej metódy, príklad prevažujúceho princípu v reálnom svete, spôsob, ako ho dosiahnuť, potrebu použitia virtuálnych a prepísateľných kľúčových slov a príklad prepísania pomocou kódu. Môžeme konštatovať, že prvoradý význam je jedným z užitočných znakov v polymorfizme, ktorým môžeme zmeniť správanie metódy základnej triedy v odvodenej triede.
Odporúčané články
Toto je sprievodca metódou Prepísanie v jazyku C #. V tejto časti si preberieme Úvod, Ako používať hlavné a rôzne kľúčové slová pre Overovanie metód spolu s príkladmi a krokmi. Ďalšie informácie nájdete aj v nasledujúcich článkoch -
- C # Funkcie
- C # Príkazy
- Čo je multithreading v jazyku C #?
- C # Reťazcové funkcie
- Sprievodca prvkami v C ++
- Prevláda v Jave
- Multithreading v C # s metódami