Sobes.tech
Junior
128
questionbank

Каковы различия между абстрактными и обычными методами в C#?

Answer from AI

sobes.tech AI

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

Основные отличия:

  • Реализация: Абстрактные методы не имеют тела, обычные — имеют.
  • Наличие ключевого слова abstract: Абстрактные методы объявляются с ключевым словом abstract, обычные — без него.
  • Расположение: Абстрактные методы могут быть объявлены только в абстрактных классах. Обычные методы могут быть в любых классах.
  • Переопределение: Абстрактные методы должны быть переопределены в неабстрактных производных классах. Обычные методы могут быть переопределены, если объявлены с ключевым словом virtual, abstract или override.
  • Доступ: Абстрактные методы не могут быть приватными (private). Обычные методы могут иметь любой модификатор доступа.

Пример абстрактного метода:

// Объявление абстрактного класса
public abstract class Shape
{
    // Объявление абстрактного метода без реализации
    public abstract double GetArea();
}

Пример обычного метода:

// Обычный класс
public class Circle : Shape
{
    public double Radius { get; set; }

    // Переопределение абстрактного метода
    public override double GetArea()
    {
        return Math.PI * Radius * Radius;
    }

    // Обычный метод с реализацией
    public void DisplayInfo()
    {
        Console.WriteLine($"Circle with radius: {Radius}");
    }
}