Перевизначення методу в C # - Вступ - Кроки - Використання перекриття

Зміст:

Anonim

Вступ про перекриття методу в C #

Переосмислення простим терміном означає, здатність змінювати поведінку методів. Всі ми знаємо про віртуальну функцію в C ++, в якій ми викликаємо функцію з базового класу у похідному класі. Перевизначення методу на C # надає аналогічну привілей, як і функція Virtual у C ++. Для прикладу птахів усі птахи матимуть однаковий атрибут як муха, колір тощо. Але у різних птахів буде різний спосіб польоту, і колір буде відрізнятися від птиці до птиці. Тож ми можемо перекрити методи базового класу Bird у похідних класах, як папуга, горобець, ворона тощо.

Як використовувати переосмислення в C #?

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

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

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

Ми використовуємо різні ключові слова для зміни методу. Вони є,

1) Віртуальне ключове слово

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

public virtual int EnemyHealth()
(
Console.WriteLine("Enemy Health");
)

2) Заміна ключового слова

Це присутнє у похідному класі. Він повідомляє компілятору, що цей метод переосмислює метод з тим самим іменем та підписом у базовому класі.

public override int EnemyHealth ()
(
Console.WriteLine("Enemy 1");
)

Приклад

Спершу розглянемо приклад, не використовуючи ключове слово Virtual і override.

Код:

class Birds
(
public void Color( )
(
Console.WriteLine("Birds will have different Colors");
)
)
class Parrot:Birds
(
public void Color( )
(
Console.WriteLine("Parrot is Green");
)
)
class ExecutionClass
(
public static void Main( )
(
Birds object;
object = new Birds( );
object .Color( );
object = new Parrot( );
object.Color( );
)
)

Вихід:

У вищенаведеному прикладі ми створили об’єкт класу Похідний Parrotand, який зберігає його посилання в об'єкті опорної змінної типу Birds.

На наступному кроці, використовуючи опорний об'єкт змінної, ми викликаємо функцію Color (). Оскільки об'єкт містить посилання на об’єкт типу Parrot, природно, що ми очікуємо, що функція Color () класу Parrot буде виконана. Але ми помиляємось Краса програмування не дозволить цього статися.

На наш подив, виконується метод Color () класу Birds. Це тому, що функція викликається на основі типу посилання, а не на те, на що посилається об'єкт посилальної змінної. Оскільки об'єкт є посиланням типу Birds, функція Color () класу Birds буде викликана, незалежно від того, до кого об'єкт посилається.

Тепер давайте перепишемо ту саму програму з віртуальною та переосмислите Цього разу ми підемо крок за кроком для кращого розуміння.

Створіть базовий клас з будь-яким ім’ям. Ось я використовую Птахів. Напишіть метод за допомогою віртуального ключового слова. Це буде наш перекритий метод, який ми перекриємо у спадковому класі. Всередині методу напишіть якесь повідомлення для друку в консолі.

class Birds
(
public virtual void Color( )
(
Console.WriteLine("Birds will have different Colors");
)
)

Тепер створимо ще один клас Parrot. Цього разу ми отримаємо його у спадок від базового класу, який ми створили раніше, тобто Птахи. Для успадкування ми використовуємо символ ':'.

клас Папуга: Птахи

Тут напишіть функцію з ключовим словом переопределення та напишіть якесь повідомлення. Переконайтесь, що ім'я методу та підпис у похідному класі відповідають імені методу та підпису в базовому класі.

public override void Color ( )
(
Console.WriteLine("Parrot is Green");
)

Нам потрібен ще один клас, щоб виконати функціональність, щоб перевірити перевагу. Створіть клас із будь-яким ім’ям. Всередині цього записати головну функцію.

class ExecutionClass
(
public static void Main( )
(
)
)

Створіть об’єкт батьківського класу та запустіть функцію, використовуючи об’єкт класу. Це дозволить викликати метод Color, присутній у класі Birds.

Birds object;
object = new Birds( );
object .Color( );

Тепер створіть об’єкт похідного класу та викличте метод Color. Це дозволить викликати метод Color класу Parrot.

object = new Parrot( );
object.Color( );

Чи можете ви здогадатися про вихід, коли ми запускаємо програму? Це як показано нижче.

Вихід:

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

Висновок

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

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

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

  1. C # Функції
  2. C # Команди
  3. Що таке багатопотокове читання в C #?
  4. C # Строкові функції
  5. Посібник з переосмислення в C ++
  6. Перевагу в Java
  7. Багатопоточність в C # з методами