Úvod do ovládania v C #

V C # je prvoradou implementáciou metódy základnej triedy do odvodenej triedy. V tomto je metóda základnej triedy prepísaná v podradenej triede. Odvodená metóda triedy má rovnaký názov a podpis ako metóda základnej triedy. Prvoradé je užitočné pri dosahovaní polymorfizmu runtime.

Existuje niekoľko kľúčových slov, ktoré sa používajú pri potlačovaní metód.

1. Virtuálne - toto kľúčové slovo sa používa so základnou triedou, čo znamená, že metóda základnej triedy sa dá prepísať.

public virtual void Method()
(
// implementation
)

2. Prepísať - toto kľúčové slovo sa používa s odvodenou triedou, čo znamená, že odvodená trieda prepíše metódu základnej triedy.

public override void Method()
(
// implementation
)

3. Base - Toto kľúčové slovo sa používa v odvodenej triede na volanie metódy základnej triedy.

public override void Method()
(
base.Method();
// implementation
)

Ako prevažuje práca v C #?

Nižšie je uvedený príklad toho, ako môžeme implementovať prepísanie v jazyku C #.

class Parent
(
public virtual void Demo() // base class
(
Console.WriteLine(“This is parent”);
)
)
class Child: Parent
(
public override void Demo() // derived class
(
Console.WriteLine(“This is child”);
)
)

Vo vyššie uvedenom príklade existujú dve triedy, jedna je základná trieda alebo rodičovská trieda a druhá je odvodená trieda alebo môžeme povedať, podradená trieda. Metóda základnej triedy je odvodená z podradenej triedy. V tomto prípade je metóda v rodiči virtuálna, čo znamená, že ju môže trieda podriadených prepísať. Prepísanie u dieťaťa znamená, že táto metóda je rovnaká ako metóda rodičovskej triedy s rovnakým podpisom metódy.

Typy prepísania v C #

Nižšie sú uvedené príklady, ktoré sa vyznačujú prvkami rôznych kľúčových slov.

Príklad 1 - Bez virtuálnych a prepísateľných kľúčových slov

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
(
class Bird // base class
(
public void fly() // base class method
(
Console.WriteLine("Birds are flying");
)
)
class Peacock : Bird // derived class
(
public new void fly() // derived class method
(
Console.WriteLine("Peacock is flying");
)
)
class Program
(
// main method
static void Main(string() args)
(
Bird b = new Peacock();
b.fly();
Console.ReadLine();
)
)
)

Vo vyššie uvedenom príklade sa nepoužije žiadne kľúčové slovo v oboch základoch, ani v odvodených metódach.

V hlavnej metóde sa rodičovská referencia používa aj na volanie podradenej metódy. Takže v tomto prípade, keď sa nepoužije žiadne kľúčové slovo, sa použije nadradená metóda namiesto podradenej metódy. Takže výstup bude

Výkon :

Príklad 2 (a) - S virtuálnymi a nahraditeľnými kľúčovými slovami

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
(
class Bird // base class
(
public virtual void fly() // base class method
(
Console.WriteLine("Birds are flying");
)
)
class Peacock : Bird // derived class
(
public override void fly() // derived class method
(
Console.WriteLine("Peacock is flying");
)
)
class Program
(
// main method
static void Main(string() args)
(
Bird b = new Peacock();
b.fly();
Console.ReadLine();
)
)
)

V tomto príklade sa virtuál používa v základnej triede, čo znamená, že dáva oprávnenie dcérskej triede implementovať metódu vlastným spôsobom. V odvodenej triede sa používa prepísanie, čo znamená, že podradená metóda je metóda prepísania. Obe metódy sú rovnaké s rovnakým názvom a rovnakým podpisom metódy, ale implementačná časť je iná. Aj v tomto príklade sa rodičovská referencia používa na volanie podradenej metódy. Ale pretože rodič je metóda, je virtuálna, takže dcérska metóda sa nazýva prvá namiesto rodičovskej metódy. Takže výstup bude

Výkon :

Príklad 2 (b) - Virtuálne a nahraditeľné kľúčové slová

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
(
class Bird // base class
(
public virtual void fly() // base class method
(
Console.WriteLine("Birds are flying");
)
)
class Peacock : Bird // derived class
(
public override void fly() // derived class method
(
Console.WriteLine("Peacock is flying");
)
)
class Program
(
//main method
static void Main(string() args)
(
Peacock p = new Peacock();
p.fly();
Console.ReadLine();
)
)
)

Tento príklad je rovnaký ako v predchádzajúcom príklade, ale táto podradená metóda sa používa ako referencia.

Výkon :

Príklad 3 - so základným kľúčovým slovom

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
(
class Bird // base class
(
public virtual void fly() // base class method
(
Console.WriteLine("Birds are flying");
)
)
class Peacock : Bird // derived class
(
public override void fly() // derived class method
(
base.fly(); // base is use to call parent method
Console.WriteLine("Peacock is flying");
)
)
class Program
(
static void Main(string() args)
(
Peacock p = new Peacock();
p.fly();
Console.ReadLine();
)
)
)

Vo vyššie uvedenom príklade sa báza používa v odvodenej triede na volanie metódy základnej triedy. Takže v tejto základnej metóde sa nazýva prvá a potom odvodená metóda.

Výkon :

Príklad 4 - Abstraktné triedy s prvoradou hodnotou

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
(
abstract class Calculate
(
public abstract int sum();
)
class Values : Calculate // derived class
(
int val1;
int val2;
public Values(int a = 0, int b = 0)
(
val1 = a;
val2 = b;
)
public override int sum()
(
Console.WriteLine("sum of two values");
return (val1 + val2);
)
)
class Program
(
static void Main(string() args)
(
Values v = new Values(10, 20);
int a = v.sum();
Console.WriteLine(a);
Console.ReadLine();
)
)
)

V uvedenom príklade sa používa abstraktná metóda. Abstraktná trieda je implementovaná odvodenou triedou, ktorá obsahuje abstraktnú metódu.

Výkon :

Pravidlá pre prepísanie metódy

  • Metodický podpis odvodenej triedy by mal byť rovnaký ako základná trieda.
  • V rovnakej triede nie je možné prepísať.
  • Modifikátory prístupu musia byť rovnaké pre virtuálne metódy a metódy nahradenia.
  • Virtuálne kľúčové slovo sa používa v metóde základnej triedy a nahradenie sa používa v metóde odvodenej triedy.
  • Metóda základnej triedy by nemala byť statická.

záver

Prekrývanie je užitočné v runtime polymorfizme. Umožňuje odvodenej triede implementovať metódu základnej triedy vlastným spôsobom. Implementácia metódy sa teda líši od odvodenej triedy od jej základnej triedy. Prepísaná metóda môže byť virtuálna, prepísaná alebo abstraktná.

Odporúčané články

Toto je príručka pre Overriding in C #. Tu diskutujeme o tom, ako použiť prepísané a rôzne kľúčové slová na prepísanie v jazyku C # spolu s príkladmi. Môžete si tiež prečítať naše ďalšie navrhované články -

  1. Spracovanie výnimiek v C #
  2. Polia v C #
  3. Prepísanie metódy v jazyku C #
  4. Premenné v C #
  5. Modifikátory prístupu v PHP
  6. Polymorfizmus v Jave
  7. Abstraktné triedy v JavaScripte
  8. Príklady tohto kľúčového slova

Kategórie: