Úvod do Overriding v C #

Převažující v C # je re-implementace metody základní třídy do odvozené třídy. Metoda základní třídy je v podřízené třídě přepsána. Metoda odvozené třídy má stejný název a podpis jako metoda základní třídy. Převážná hodnota je užitečná pro dosažení polymorfismu runtime.

Existuje několik klíčových slov, která se používají při potlačování metod.

1. Virtuální - Toto klíčové slovo se používá se základní třídou, což znamená, že lze přepsat metodu základní třídy.

public virtual void Method()
(
// implementation
)

2. Přepsání - Toto klíčové slovo se používá s odvozenou třídou, což znamená, že odvozená třída přepíše metodu základní třídy.

public override void Method()
(
// implementation
)

3. Base - Toto klíčové slovo se používá v odvozené třídě k vyvolání metody základní třídy.

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

Jak převažující práce v C #?

Níže je uveden příklad, jak můžeme implementovat přepsání v 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”);
)
)

Ve výše uvedeném příkladu jsou dvě třídy, jedna je základní třída nebo nadřazená třída a druhá je odvozená třída nebo můžeme říci, podřízená třída. Metoda základní třídy je odvozena od podřízené třídy. V tomto případě je metoda v nadřazené položce virtuální, což znamená, že ji lze podřazenou třídou přepsat. Přepsání u podřízeného znamená, že tato metoda je stejná jako metoda nadřazené třídy se stejným podpisem metody.

Typy potlačení v C #

Níže jsou uvedeny příklady, které ukazují přednost před různými klíčovými slovy.

Příklad 1 - Bez virtuálních a přepisujících klíč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();
)
)
)

Ve výše uvedeném příkladu se žádné klíčové slovo nepoužívá v obou základech ani v odvozených metodách.

Také v hlavní metodě se rodičovská reference používá k vyvolání podřízené metody. Takže v tomto případě, když není použito žádné klíčové slovo, je použita rodičovská metoda místo podřízené metody. Takže výstup bude

Výstup :

Příklad 2 (a) - S virtuálními a přepisujícími klíčovými slovy

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 příkladu je virtuální použit v základní třídě, což znamená, že dává oprávnění podřízené třídě implementovat metodu svým vlastním způsobem. Ve odvozené třídě se používá přepsání, což znamená, že podřízená metoda je přepisovací metoda. Obě metody jsou stejné se stejným názvem a stejným podpisem metody, ale implementační část je jiná. V tomto příkladu se k vyvolání podřízené metody používá také nadřazený odkaz. Ale protože je nadřazená metoda, je virtuální metoda, takže podřízená metoda se nazývá první místo nadřazené metody. Takže výstup bude

Výstup :

Příklad 2 (b) - Virtuální a přepsat klíčová slova

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 příklad je stejný jako v předchozím příkladu, ale tato podřízená metoda se používá jako reference.

Výstup :

Příklad 3 - Se základním klíčovým slovem

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();
)
)
)

Ve výše uvedeném příkladu je báze použita v odvozené třídě k vyvolání metody základní třídy. Takže v této základní metodě se nazývá první a pak odvozená metoda.

Výstup :

Příklad 4 - Abstraktní třídy s převahou

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();
)
)
)

Ve výše uvedeném příkladu je použita abstraktní metoda. Abstraktní třída je implementována odvozenou třídou, která obsahuje abstraktní metodu.

Výstup :

Pravidla pro přepsání metody

  • Metoda podpis odvozené třídy by měla být stejná jako základní třída.
  • Přepisování není možné ve stejné třídě.
  • Modifikátory přístupu musí být stejné pro virtuální metody a metody potlačení.
  • Virtuální klíčové slovo se používá v metodě základní třídy a přepisování se používá v odvozené metodě třídy.
  • Metoda základní třídy by neměla být statická.

Závěr

Přepisování je užitečné v runtime polymorfismu. Umožňuje odvozené třídě implementovat metodu základní třídy svým vlastním způsobem. Implementace metody se tedy liší od odvozené třídy od její základní třídy. Přepsaná metoda může být virtuální, přepsaná nebo abstraktní.

Doporučené články

Toto je průvodce k Overriding v C #. Zde diskutujeme o tom, jak použít přepisování a různá klíčová slova pro přepsání v C # spolu s příklady. Můžete si také prohlédnout naše další doporučené články -

  1. Zpracování výjimek v C #
  2. Pole v C #
  3. Přepsání metody v C #
  4. Proměnné v C #
  5. Přístup modifikátory v PHP
  6. Polymorfismus v Javě
  7. Abstraktní třídy v JavaScriptu
  8. Příklady tohoto klíčového slova

Kategorie: