четверг, 27 января 2022 г.

Что такое абстрактный класс В C# ?

 Что такое абстрактный класс В C# ? 


Абстрактный класс это обычный класс объявленный с ключевым словом abstract.

  C#     Пример
// абстрактный класс
abstract class Animal
{
...
}
Абстрактные методы,
Абстрактный класс может иметь абстрактные методы.
У абстрактного метода нет тела.
Абстрактный метод указывается с помощью модификатора abstract
  C#     Пример
abstract class Animal
{
     // абстрактный метод
     public abstract string SayWord();
}
Абстрактные свойства
Абстрактный класс может иметь абстрактные свойства.
У абстрактного свойства нет тела.
Абстрактное свойство указывается с помощью модификатора abstract

  C#     Пример
abstract class Animal
{
     // абстрактное свойство
     abstract public string Name { get; set; }
}

На заметку!

Абстрактные методы, свойства должны быть переопределены в производном классе словом override.

Абстрактные методы, свойства автоматически становятся виртуальными и не требует указания модификатора virtual.

Совместное использование модификаторов virtual и abstract считается ошибкой компиляции.

Модификатор abstract не может применяться в статических методах, свойствах.

Обычные конструкторы, методы, свойства, члены класса

Абстрактный класс может иметь конструкторы, методы, свойства, члены класса и так далее

  C#     Пример
// абстрактный класс
abstract class Animal
{
     // абстрактный метод
     public abstract string SayWord();

     // абстрактное свойство
     abstract public string Name { get; set; }

     // конструктор класса
     public Animal()
     {
          Name = "";
     }

     // свойство
     public double Price { get; set; }

     // метод
     public void ShowInfo()
     {
          Console.WriteLine(Name);
     }
}
Когда использовать абстрактный класс?

Класс, содержащий один или больше абстрактных методов, должен быть объявлен со словом abstract.
Класс, содержащий один или больше абстрактных свойств, должен быть объявлен со словом abstract.

На заметку!
Если класс содержит один или больше абстрактных методов и не объявлен со словом abstract то будет ошибка компиляции.
Если класс содержит один или больше абстрактных свойств и не объявлен со словом abstract то будет ошибка компиляции.

  C#  
class Animal // ошибка компиляции отсутствует слово abstract
{
     abstract void GetName();
}
Как использовать абстрактный класс ?

Нельзя создавать экземпляры абстрактного класса.
Чтобы использовать абстрактный класс мы должны написать реализацию абстрактного класса.
То есть мы должны написать новый класс. В новом классе написать имплементацию для всех абстрактных методов и свойств.

Пример!
  C#     Создаем новое консольное приложение C#... и напишем код
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
     // абстрактный класс
     abstract class Animal
     {
          // абстрактный метод
          public abstract string SayWord();

          // абстрактное свойство
          abstract public string Name { get; set; }

          // конструктор класса
          public Animal()
          {
               Name = "";
          }

          // свойство
          public double Price { get; set; }

          // метод
          public void ShowInfo()
          {
               Console.WriteLine(Name + " " + SayWord());
          }
     }

     // класс Dog
     class Dog : Animal
     {
          // имплементация абстрактного метода
          public override string SayWord()
          {
               return "Gav Gav";
          }

          // имплементация абстрактного свойства
          public override string Name { get; set; }

          // конструктор класса
          public Dog() : base() // вызываем конструктор Animal
          {
               Name = "Big dog";
          }
     }

     class Program
     {
          static void Main(string[] args)
          {
               Animal animal = new Dog();
               animal.ShowInfo();
               // на экране увидим
               // Big dog Gav Gav
          }
     }
}

На заметку!
Нельзя использовать абстрактный класс с модификатором sealed потому что это противоречие.

Модификатор sealed запрещает наследование класса.

Модификатор abstract указывает, что класс обязан иметь производные классы.

Отказ от реализации абстрактных методов, свойств

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

Пример!
  C#  
// абстрактный класс
abstract class Animal
{
     // абстрактный метод
     public abstract string SayWord();

     // абстрактное свойство
     abstract public string Name { get; set; }

     // конструктор класса
     public Animal()
     {
          Name = "";
     }

     // свойство
     public double Price { get; set; }

     // метод
     public void ShowInfo()
     {
          Console.WriteLine(Name + " " + SayWord());
     }
}

// абстрактный класс наследуется от абстрактного класса
abstract class MyAnimal : Animal
{
}

Комментариев нет:

Отправить комментарий

Паттерн 'Репозиторий' в ASP.NET

  Последнее обновление: 1.11.2015         Одним из наиболее часто используемых паттернов при работе с данными является паттерн 'Репозито...