Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Наследование и полиморфизм в C#: практические примеры кода

Что такое наследование в C#?

Наследование — краеугольный камень объектно-ориентированного дизайна в C#. Оно позволяет дочернему классу автоматически получать поля и методы родительского класса, сохраняя при этом возможность переопределять или расширять это поведение. Это способствует повторному использованию кода, упрощает поддержку и устанавливает чёткую иерархию.

Пример наследования в C#

Ниже приведена пошаговая демонстрация реализации наследования и использования protected-членов.

Шаг 1 – Модификация базового класса

Откройте Tutorial.cs и измените класс Tutorial так, чтобы его ключевые поля были protected:

Наследование и полиморфизм в C#: практические примеры кода

Использование protected гарантирует, что только производные классы могут напрямую обращаться к этим полям.

Шаг 2 – Создание производного класса

Добавьте следующий код в Tutorial.cs после определения базового класса:

Наследование и полиморфизм в C#: практические примеры кода

Пояснение:

  1. Объявляем Guru99Tutorial как наследника Tutorial с помощью двоеточия (:).
  2. Добавляем метод RenameTutorial, присваивающий новое значение TutorialName.
  3. Так как TutorialName защищён, Guru99Tutorial может к нему обращаться, хотя он не объявлен явно там.

Шаг 3 – Использование производного класса в Program.cs

Замените содержимое Program.cs на следующее:

Наследование и полиморфизм в C#: практические примеры кода

using System;
namespace DemoApplication {
    public class Tutorial {
        protected int TutorialID;
        protected string TutorialName;
        public void SetTutorial(int pID, string pName) {
            TutorialID = pID;
            TutorialName = pName;
        }
        public string GetTutorial() {
            return TutorialName;
        }
    }
    public class Guru99Tutorial : Tutorial {
        public void RenameTutorial(string pNewName) {
            TutorialName = pNewName;
        }
        static void Main(string[] args) {
            Guru99Tutorial pTutor = new Guru99Tutorial();
            pTutor.RenameTutorial(".Net by Guru99");
            Console.WriteLine(pTutor.GetTutorial());
            Console.ReadKey();
        }
    }
}

Пояснение:

  1. Программа инстанцирует Guru99Tutorial, а не базовый Tutorial.
  2. Вызывает RenameTutorial для изменения заголовка.
  3. Хотя GetTutorial определён в базовом классе, экземпляр наследника может вызывать его напрямую.

Запуск этого кода печатает:

Наследование и полиморфизм в C#: практические примеры кода

Что такое полиморфизм в C#?

Полиморфизм позволяет одному интерфейсу представлять разные базовые формы. В C# это часто проявляется как перегрузка или переопределение методов, позволяя одному имени метода выполнять разные задачи в зависимости от параметров или контекста.

Пример полиморфизма в C#

Продемонстрируем перегрузку методов в рамках одного класса.

Шаг 1 – Обновление базового класса

Измените Tutorial.cs как показано:

Наследование и полиморфизм в C#: практические примеры кода

Ключевые изменения:

  1. Метод SetTutorial теперь имеет две перегрузки — одна принимает int и string, другая — только string.
  2. Обе перегрузки присваивают значения соответствующим полям.

Шаг 2 – Тестирование в Program.cs

Замените Program.cs на следующий код:

using System;
namespace DemoApplication {
    class Tutorial {
        public int TutorialID;
        public string TutorialName;
        public void SetTutorial(int pID, string pName) {
            TutorialID = pID;
            TutorialName = pName;
        }
        public void SetTutorial(string pName) {
            TutorialName = pName;
        }
        public string GetTutorial() {
            return TutorialName;
        }
        static void Main(string[] args) {
            Tutorial pTutor = new Tutorial();
            pTutor.SetTutorial(1, "First Tutorial");
            Console.WriteLine(pTutor.GetTutorial());
            pTutor.SetTutorial("Second Tutorial");
            Console.WriteLine(pTutor.GetTutorial());
            Console.ReadKey();
        }
    }
}

Пояснение:

  1. Первый вызов передаёт оба id и name в двухпараметровую перегрузку.
  2. Второй вызов передаёт только name, вызывая однопараметровую перегрузку.

Консоль отображает:

Наследование и полиморфизм в C#: практические примеры кода

Для продвинутых сценариев можно добавить метод GetTutorialID для отдельного получения ID.

Резюме

Язык C

  1. Выражения, операторы и блоки в C#: подробное руководство с примерами
  2. Классы и объекты в C#: Фундаменты надёжного ООП
  3. Абстрактные классы и методы в C#: практическое руководство
  4. Частичные классы и методы в C#: понимание и применение
  5. Sealed-классы и sealed-методы в C#: когда использовать, примеры и повышение безопасности кода
  6. Функции в C++: подробное объяснение с практическими примерами кода
  7. C++ Struct vs Class: ключевые отличия, синтаксис и лучшие сценарии использования
  8. Циклы while и do-while: наглядное сравнение с практическими примерами
  9. Понимание type() и isinstance() в Python: практические примеры
  10. Структура программы на C#: основные компоненты и пример Hello World