Переопределение метода в C # - Введение - Шаги - Использование переопределения

Содержание:

Anonim

Введение в переопределение методов в C #

Переопределение в простом термине означает способность изменять поведение методов. Мы все знаем о функции Virtual в C ++, в которой мы вызываем функцию из базового класса в производном классе. Переопределение метода в C # предоставляет те же привилегии, что и Виртуальная функция в C ++. Чтобы взять пример птиц, все птицы будут иметь один и тот же атрибут, как муха, цвет и т. Д. Но разные птицы будут иметь разный способ полета, и цвет будет варьироваться от птицы к птице. Таким образом, мы можем переопределить методы базового класса Bird в производных классах, таких как parrot, sparrow, crow и т. Д.

Как использовать переопределение в 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. На этот раз мы унаследуем его от базового класса, который мы создали ранее, т.е. Birds. Для наследования мы используем символ «:».

Класс Попугай: Птицы

Здесь напишите функцию с ключевым словом override и напишите какое-нибудь сообщение. Убедитесь, что имя и подпись метода в производном классе совпадают с именем и подписью метода в базовом классе.

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

Нам нужен еще один класс для выполнения функциональности, чтобы проверить переопределение. Создать класс с любым именем. Внутри этого написать функцию Main.

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

Создайте объект родительского класса и запустите функцию, используя объект класса. Это вызовет метод Color, представленный в классе Birds.

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

Теперь создайте объект производного класса и вызовите метод Color. Это вызовет метод Color класса Parrot.

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

Можете ли вы угадать выход при запуске программы? Это как показано ниже.

Выход:

Ключевые слова override и virtual позволяют вызывать методы базового класса и производного класса отдельно в любой момент времени, даже если имена и сигнатуры методов совпадают.

Вывод

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

Рекомендуемые статьи

Это руководство по переопределению метода в C #. Здесь мы обсуждаем введение, как использовать переопределение и различные ключевые слова для переопределения метода, а также примеры и шаги. Вы также можете посмотреть следующие статьи, чтобы узнать больше -

  1. Функции C #
  2. Команды C #
  3. Что такое многопоточность в C #?
  4. Строковые функции C #
  5. Руководство по переопределению в C ++
  6. Переопределение в Java
  7. Многопоточность в C # с методами