Основное различие между обычным классом и абстрактным классом в C# заключается в их назначении и возможностях использования. Давайте разберём ключевые отличия.
// Обычный класс
var person = new Person(); // OK
// Абстрактный класс
// var animal = new Animal(); // Ошибка компиляции!
public abstract class Animal
{
public abstract void MakeSound(); // Абстрактный метод (нет реализации)
}
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Гав!");
}
}
Обычный класс:
Абстрактный класс:
abstract
.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;
}
}
sealed
, запрещая наследование.sealed
(противоречит его назначению).public sealed class MySealedClass { } // OK
// public abstract sealed class InvalidClass { } // Ошибка!
главное отличие — абстрактный класс нельзя инстанцировать, и он часто содержит абстрактные члены, которые должны быть реализованы в наследниках. Обычный класс — это законченная сущность для создания объектов, хотя и может участвовать в наследовании.