Вступ до перевантаження та перекриття в C #

Поліморфізм - одне з важливих понять у C #. Існує два види поліморфізму, час складання та час виконання. Для досягнення цього відповідно використовуються поняття перевантаження та перезавантаження. При переосмисленні дочірній клас може реалізувати метод батьківського класу по-іншому, але метод дочірнього класу має те саме ім'я та такий же підпис методу, що і батьківський, тоді як при перевантаженні є кілька методів у класі з однаковим іменем та різними параметрами.

Як перезавантаження та перевантаження працює в C #?

Робота переосмислення та перевантаження в C # пояснюється нижче прикладами:

Переважаючий

Існує кілька ключових слів, які ми використовуємо в переважаючих, таких як віртуальний, переосмислений та базовий.

Синтаксис:

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

У цьому використовується віртуальне та переосмислене ключові слова, що означає, що базовий клас є віртуальним, а дочірній клас може реалізувати цей клас, а переосмислити означає, що цей дочірній клас має те саме ім'я та підпис методу, що і батьківський клас.

Приклад №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();
)
)
)

У наведеному вище прикладі назва методів однакова, але їх реалізація відрізняється. Базовий клас має віртуальний, і завдяки цьому дочірній клас може реалізувати метод батьківського класу по-своєму. Метод дочірнього класу має переосмислення ключового слова, що показує, що цей метод є методом переопределення.

Вихід:

Приклад №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();
)
)
)

Вихід:

У цьому прикладі похідний клас має базове ключове слово, яке використовується для виклику методу базового класу. Отже, у цьому випадку похідний метод називається після методу базового класу.

Бальні пам'ятки:

  • У переважній концепції ім'я методу та модифікатора підпису та доступу завжди є таким самим, як батьківський та дочірній клас.
  • Метод батьківського класу не може бути статичним.

Перевантаження

У перевантаженні існує кілька методів з різним підписом методу. Нижче наведено кілька прикладів, які показують, як ми можемо досягти перевантаження, змінюючи кількість параметрів, порядок параметрів та типи даних параметрів.

Приклад №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();
)
)
)

У наведеному вище прикладі є два методи з однаковою назвою, але різною кількістю параметрів. Перший спосіб складається з двох параметрів, тоді як другий має три параметри. Це називається методом перевантаження.

Вихід:

Приклад №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();
)
)
)

У наведеному вище прикладі є два методи з однаковою назвою, але типи їх даних різні. Перший метод має цілий тип даних, а другий - подвійний тип даних. Тому в цьому випадку параметри змінюються через різний тип даних.

Вихід:

Приклад №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();
)
)
)

У наведеному вище прикладі назва методів однакова, але порядок параметрів різний. Перший метод має ім'я та ідентифікатор, відповідно. тоді як другий має ідентифікатор та ім’я відповідно.

Вихід:

Бальні пам'ятки:

  • У концепції перевантаження неможливо визначити більше одного методу з однаковими параметрами у разі порядку, типу та кількості.
  • Неможливо перевантажити метод на основі різних типів повернення.

Переваги перевантаження та перекриття в C #

  • Перевантаження - один із способів досягнення статичного, а переосмислення - один із способів, яким C # досягає динамічного поліморфізму.
  • Це забезпечує гнучкість для користувача та чистоту коду.

Висновок

Перевантаження і переоцінка відіграють головну роль у досягненні поліморфізму. Переопределення дозволяє похідному класу реалізувати по-своєму, а з іншого боку, перевантаження стосується методів з однаковою назвою та різних типів реалізації параметрів.

Рекомендовані статті

Це посібник із перевантаження та переосмислення в C #. Тут ми обговорюємо роботу, синтаксис, переваги перевантаження та переосмислення в C # із прикладами та реалізацією коду. Ви також можете переглянути наступні статті, щоб дізнатися більше -

  1. Об'єкти в C #
  2. 2D масиви в C #
  3. Переоцінка в C #
  4. Обмін на C #
  5. Поліморфізм на Яві
  6. 2D графіка на Java
  7. 3 різні типи масивів у PHP (приклади)