Wprowadzenie do przeciążania i przesłonięcia w C #

Polimorfizm jest jedną z ważnych koncepcji w języku C #. Istnieją dwa rodzaje polimorfizmu, czas kompilacji i czas wykonywania. Do tego celu stosuje się odpowiednio pojęcia przeciążenia i zastąpienia. W przypadku przesłonięcia klasa podrzędna może zaimplementować metodę klasy nadrzędnej w inny sposób, ale metoda klasy podrzędnej ma tę samą nazwę i tę samą sygnaturę metody co rodzic, natomiast w przypadku przeciążenia istnieje wiele metod w klasie o tej samej nazwie i różnych parametrach.

Jak działa nadpisywanie i przeciążanie w C #?

Działanie zastępowania i przeciążania w języku C # wyjaśniono poniżej przykładami:

Nadrzędny

Istnieje kilka słów kluczowych, których używamy do przesłonięcia, takich jak wirtualny, przesłonięcie i baza.

Składnia:

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

W tym przypadku używane są słowa kluczowe wirtualne i zastępujące, co oznacza, że ​​klasa podstawowa jest wirtualna, a klasa potomna może zaimplementować tę klasę, a zastąpienie oznacza, że ​​ta klasa potomna ma taką samą nazwę i taką samą sygnaturę metody jak klasa nadrzędna.

Przykład 1

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OverridingExample
(
class Subject // base class
(
public virtual void study() // base class method
(
Console.WriteLine("Study all the subjects");
)
)
class Mathematics: Subject // derived class
(
public override void study() // derived class method
(
Console.WriteLine("Study Mathematics");
)
)
class Program
(
// main method
static void Main(string() args)
(
Subject s = new Mathematics();
s.study();
Console.ReadLine();
)
)
)

W powyższym przykładzie nazwa metod jest taka sama, ale ich implementacja jest inna. Klasa podstawowa ma wirtualną i dzięki temu klasa potomna może implementować metodę klasy nadrzędnej na swój własny sposób. Metoda klasy potomnej ma przesłonięcie słowa kluczowego, co pokazuje, że jest to metoda przesłonięcia.

Wynik:

Przykład nr 2

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OverridingExample
(
class Subject // base class
(
public virtual void study() // base class method
(
Console.WriteLine("Study all the subjects");
)
)
class Mathematics: Subject // derived class
(
public override void study() // derived class method
(
base.study();
Console.WriteLine("Study Mathematics");
)
)
class Program
(
// main method
static void Main(string() args)
(
Mathematics m = new Mathematics();
m.study();
Console.ReadLine();
)
)
)

Wynik:

W tym przykładzie klasa pochodna ma podstawowe słowo kluczowe, które służy do wywołania metody klasy podstawowej. W takim przypadku metoda pochodna jest wywoływana po metodzie klasy bazowej.

Punkty do zapamiętania:

  • W koncepcji nadrzędnej nazwa metody i podpis metody oraz modyfikator dostępu są zawsze takie same jak klasa nadrzędna i podrzędna.
  • Metoda klasy nadrzędnej nie może być statyczna.

Przeciążenie

W przypadku przeciążenia istnieje wiele metod z różnymi sygnaturami metod. Poniżej znajduje się kilka przykładów, które pokazują, w jaki sposób możemy osiągnąć przeciążenie, zmieniając liczbę parametrów, kolejność parametrów i typy danych parametrów.

Przykład 1

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OverloadingExample
(
class Demo
(
public int Sum(int x, int y)
(
int value = x + y;
return value;
)
public int Sum(int x, int y, int z)
(
int value = x + y + z;
return value;
)
public static void Main(string() args) // main method
(
Demo d = new Demo();
int sum1 = d.Sum(24, 28);
Console.WriteLine("sum of the two "
+ "integer value : " + sum1);
int sum2 = d.Sum(10, 20, 30);
Console.WriteLine("sum of the three "
+ "integer value : " + sum2);
Console.ReadLine();
)
)
)

W powyższym przykładzie istnieją dwie metody o tej samej nazwie, ale o różnej liczbie parametrów. Pierwsza metoda składa się z dwóch parametrów, podczas gdy druga ma trzy parametry. Nazywa się to przeciążeniem metody.

Wynik:

Przykład nr 2

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OverloadingExample
(
class Demo
(
public int Sum(int x, int y, int z)
(
int value = x + y + z;
return value;
)
public double Sum(double x, double y, double z)
(
double value = x + y + z;
return value;
)
public static void Main(string() args) // main method
(
Demo d = new Demo();
int sum1 = d.Sum(24, 28, 7);
Console.WriteLine("sum of the two "
+ "integer value : " + sum1);
double sum2 = d.Sum(10.0, 20.0, 30.0);
Console.WriteLine("sum of the three "
+ "integer value : " + sum2);
Console.ReadLine();
)
)
)

W powyższym przykładzie istnieją dwie metody o tej samej nazwie, ale ich typy danych są różne. Pierwsza metoda ma całkowity typ danych, a druga ma podwójny typ danych. Tak więc w tym przypadku parametry są różne ze względu na inny typ danych.

Wynik:

Przykład nr 3

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OverloadingExample
(
class Demo
(
public void Details(String name, int id)
(
Console.WriteLine("Name " + name + ", "
+ "Id " + id); ;
)
public void Details(int id, string name)
(
Console.WriteLine("Name " + name + ", "
+ "Id " + id);
)
public static void Main(string() args) // main method
(
Demo d = new Demo();
d.Details("John", 10);
d.Details("Joe", 20);
Console.ReadLine();
)
)
)

W powyższym przykładzie nazwy metod są takie same, ale kolejność parametrów jest inna. Pierwsza metoda ma nazwę i id odpowiednio. podczas gdy drugi ma odpowiednio identyfikator i nazwę.

Wynik:

Punkty do zapamiętania:

  • W koncepcji przeciążenia nie jest możliwe zdefiniowanie więcej niż jednej metody o tych samych parametrach w przypadku zamówienia, rodzaju i liczby.
  • Nie można przeciążać metody opartej na różnych typach zwrotów.

Zalety przeciążenia i przesłonięcia w C #

  • Przeciążenie jest jednym ze sposobów osiągnięcia statyczności, a zastąpienie jest jednym ze sposobów, w jaki C # osiąga polimorfizm dynamiczny.
  • Zapewnia elastyczność dla użytkownika i czystość kodu.

Wniosek

Przeciążenie i zastąpienie odgrywają ważną rolę w osiągnięciu polimorfizmu. Przesłonięcie pozwala implementować klasę pochodną na swój własny sposób, a przeciążenie dotyczy metod o tej samej nazwie i różnych typów implementacji parametrów.

Polecane artykuły

Jest to przewodnik po przeciążaniu i zastępowaniu w języku C #. Tutaj omawiamy działanie, składnię, zalety przeciążania i przesłonięcia w C # z przykładami i implementacją kodu. Możesz także przejrzeć następujące artykuły, aby dowiedzieć się więcej -

  1. Obiekty w C #
  2. Tablice 2D w C #
  3. Przesłanianie w C #
  4. Zamiana w C #
  5. Polimorfizm w Javie
  6. Grafika 2D w Javie
  7. 3 różne typy tablic w PHP (przykłady)