Sobes.tech
Junior
117
questionbank

Как в .NET реализовано наследование?

Answer from AI

sobes.tech AI

В .NET наследование реализовано как механизм, позволяющий создавать новые классы на основе существующих. Новый класс (класс-наследник, производный класс) наследует члены базового класса (предок, родительский класс).

  • Одиночное наследование: В C# класс может наследовать только от одного базового класса.
  • Наследование интерфейсов: Класс может реализовывать множество интерфейсов.
  • Ключевые слова:
    • :: используется для указания базового класса и реализуемых интерфейсов.
    • base: используется для доступа к членам базового класса из производного класса.
    • virtual: указывает, что метод, свойство или индексатор в базовом классе может быть переопределен в производном классе.
    • override: указывает, что метод, свойство или индексатор в производном классе переопределяет член с таким же именем из базового класса с модификатором virtual или abstract.
    • abstract: указывает, что класс или член класса является абстрактным и не может быть создан напрямую (для абстрактного класса) или не имеет реализации (для абстрактного члена) и должен быть переопределен в производном классе.
    • sealed: указывает, что класс не может быть унаследован.
  • Конструкторы: Конструкторы базового класса не наследуются, но могут быть вызваны из конструктора производного класса с помощью ключевого слова base.
// Базовый класс
public class BaseClass
{
    public int BaseProperty { get; set; }

    public BaseClass(int baseValue)
    {
        BaseProperty = baseValue;
    }

    public virtual void Display()
    {
        Console.WriteLine($"Base Property: {BaseProperty}");
    }
}

// Производный класс
public class DerivedClass : BaseClass
{
    public string DerivedProperty { get; set; }

    public DerivedClass(int baseValue, string derivedValue) : base(baseValue)
    {
        DerivedProperty = derivedValue;
    }

    // Переопределение метода базового класса
    public override void Display()
    {
        base.Display(); // Вызов метода базового класса
        Console.WriteLine($"Derived Property: {DerivedProperty}");
    }
}