Introduktion till åsidosättande i C #

Övergripande i C # är återimplementering av en basklassmetod i en härledd klass. I detta åsidosätts basklassmetoden i barnklass. Den härledda klassmetoden har samma namn och signatur som basklassmetoden. Övervägande är användbart för att uppnå Runtime-polymorfism.

Det finns några nyckelord som används vid åsidosättande av metod.

1. Virtuellt - Detta nyckelord används med en basklass som betyder att metoden för en basklass kan åsidosättas.

public virtual void Method()
(
// implementation
)

2. Överskridande - Detta nyckelord används med en härledd klass som betyder att härledd klass åsidosätter en metod för en basklass.

public override void Method()
(
// implementation
)

3. Base - Detta nyckelord används i en härledd klass för att anropa basklassmetoden.

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

Hur fungerar överkörning i C #?

Nedan är ett exempel på hur vi kan implementera överskridande i 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”);
)
)

I exemplet ovan finns det två klasser, en är basklass eller förälderklass och den andra är härledd klass eller vi kan säga, barnklass. En basklassmetod härleds i barnklass. I detta är metoden hos en förälder virtuell vilket innebär att den kan åsidosättas av barnklassen. Överskridande hos ett barn betyder att den här metoden är densamma som föräldraklassmetoden med samma metodsignatur.

Typer av åsidosättande i C #

Nedan följer exemplen som visar överväldigande med olika sökord.

Exempel 1 - Utan virtuella sökord och åsidosättande

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

I exemplet ovan används inget nyckelord i både baser och härledda metoder.

Även i huvudmetoden används förälderreferens för att kalla barnmetoden. Så i det här fallet när inget nyckelord används, kallas överordnad metod istället för en barnmetod. Så utgången blir

Utgång:

Exempel 2 (a) - Med virtuella och åsidosättande nyckelord

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

I det här exemplet används virtuellt i basklassen vilket innebär att det ger myndighet till barnklass att implementera metoden på sitt eget sätt. I en härledd klass används åsidosättande vilket innebär att barnmetoden är åsidosättningsmetoden. Båda metoderna är desamma med samma namn och samma metodsignatur men implementeringsdelen är annorlunda. I detta exempel används även förälderreferens för att kalla barnmetoden. Men eftersom en förälder är en metod är virtuell så barnmetoden kallas först istället för föräldermetoden. Så utgången blir

Utgång:

Exempel 2 (b) - Virtuella och åsidosättande nyckelord

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

Det här exemplet är detsamma som det föregående exemplet men detta barn, metod används för referens.

Utgång:

Exempel 3 - Med nyckelord

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

I exemplet ovan används basen i en härledd klass för att anropa basklassmetoden. Så i den här basmetoden kallas först och sedan den härledda metoden.

Utgång:

Exempel 4 - Abstrakta klasser med överskridande

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

I exemplet ovan används en abstrakt metod. En abstrakt klass implementeras av den härledda klassen som innehåller en abstrakt metod.

Utgång:

Regler för åsidosättande av metod

  • Metodsignaturen för en härledd klass bör vara densamma som en basklass.
  • Överskridande är inte möjligt i samma klass.
  • Tillgångsmodifierare måste vara desamma för virtuella metoder och åsidosättningsmetoder.
  • Det virtuella nyckelordet används i basklassmetoden och åsidosättande används i en härledd klassmetod.
  • Basklassmetoden ska inte vara statisk.

Slutsats

Överskridande är användbart vid polymorfism under körning. Den tillåter härledd klass att implementera en basklassmetod på sitt eget sätt. Så metodimplementeringen skiljer sig från härledd klass från dess basklass. Den åsidosatta metoden kan vara virtuell, åsidosättande eller abstrakt.

Rekommenderade artiklar

Detta är en guide till Överridning i C #. Här diskuterar vi hur man använder åsidosättande och olika nyckelord för Överridning i C # tillsammans med exempel. Du kan också gå igenom våra andra föreslagna artiklar -

  1. Undantagshantering i C #
  2. Matriser i C #
  3. Metodöverskridande i C #
  4. Variabler i C #
  5. Få åtkomst till modifierare i PHP
  6. Polymorfism i Java
  7. Abstrakta klasser i JavaScript
  8. Exempel på detta sökord

Kategori: