Что такое абстрактный класс в C #?
АБСТРАКТНЫЙ КЛАСС никогда не может быть создан и помечен ключевым словом abstract. Абстрактный класс должен иметь как минимум один абстрактный метод. Абстрактный класс действует как базовый класс и предназначен для наследования подклассами, которые либо реализуют, либо переопределяют его метод.
Типичный пример абстрактного класса приведен ниже. Ниже приведено определение класса под названием «Животное». Когда определен класс «Животное», о животном ничего не известно, будь то собака или кошка. Метод с именем description — это просто обобщенный метод, определенный для класса.
Теперь, когда известно, кем именно будет Animal, мы создаем другой класс, который наследует базовый класс. Если мы знаем, что животное на самом деле является собакой, мы создаем класс Dog, который наследует основной базовый класс. Ключевым отличием здесь является то, что класс Dog не может изменить определение метода Description класса Animal. Он должен определить свой собственный метод с именем Dog-Description. Это основная концепция абстрактных классов.
Давайте посмотрим, как мы можем изменить наш код, чтобы включить абстрактный класс. Обратите внимание, что мы не будем запускать код, потому что нет ничего, что можно запустить с использованием абстрактного класса.
Шаг 1) В качестве первого шага давайте создадим абстрактный класс. Класс будет называться Tutorial и будет иметь только один метод. Весь код должен быть записан в файле Program.cs.
Объяснение кода: —
- Сначала мы определим абстрактный класс. Обратите внимание на использование абстрактного ключевого слова. Это используется для обозначения того, что класс является абстрактным классом.
- Далее мы определяем наш метод, который ничего не делает. У метода должно быть ключевое слово с именем virtual. Это означает, что метод не может быть изменен дочерним классом. Это основное требование для любого абстрактного класса.
Шаг 2) Теперь давайте добавим наш дочерний класс. Этот код добавляется в файл Program.cs.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { abstract class Tutorial { public virtual void Set() { } } class Guru99Tutorial:Tutorial { protected int TutorialID; protected string TutorialName; public void SetTutorial(int pID,string pName) { TutorialID=pID; TutorialName=pName; } public String GetTutorial() { return TutorialName; } static void Main(string[] args) { Guru99Tutorial pTutor=new Guru99Tutorial(); pTutor.SetTutorial(1,".Net"); Console.WriteLine(pTutor.GetTutorial()); Console.ReadKey(); } } }
В этом коде нет ничего исключительного. Мы просто определяем класс с именем Guru99Tutorial, который наследует абстрактный класс Tutorial. Затем мы определяем те же методы, которые мы использовали ранее.
Примечание. Здесь мы не можем изменить определение метода Set, определенного в классе Tutorial. В классе Tutorial мы определили метод с именем ‘Set’ (публичная виртуальная пустота Set ()). Так как метод был частью абстрактного класса, нам не разрешено снова определять метод Set в классе Guru99Tutorial.
Резюме