День сто двадцать второй. #ВопросыНаСобеседовании
Самые часто задаваемые вопросы на собеседовании по C#
11. Что такое закрытый класс в C#?
Закрытые классы используются для ограничения наследования в объектно-ориентированном программировании. Класс, определёный как закрытый, не может быть унаследован.
В C# для определения закрытого класса используется модификатор
Все структуры закрыты. Вы не можете унаследовать класс из структуры.
Закрытые методы и свойства
Вы также можете использовать модификатор
Основная цель закрытого класса состоит в том, чтобы запретить наследование от класса. Один из лучших вариантов использования закрытых классов - это класс со статическими членами. Например, классы
Если класс не предназначен для наследования, подклассы могут нарушать инварианты класса. Поэтому, как правило, рекомендуется закрывать любой класс, явно не предназначенный для наследования от него.
В библиотеке классов Microsoft наследование ограничено только теми местами, где оно действительно имеет смысл. Очень многие классы, например
Источники:
- https://www.c-sharpcorner.com
- https://stackoverflow.com/questions/7777611/when-and-why-would-you-seal-a-class
Самые часто задаваемые вопросы на собеседовании по C#
11. Что такое закрытый класс в C#?
Закрытые классы используются для ограничения наследования в объектно-ориентированном программировании. Класс, определёный как закрытый, не может быть унаследован.
В C# для определения закрытого класса используется модификатор
sealed
. Если создать класс производный от закрытого класса, то компилятор выдаст ошибку.Все структуры закрыты. Вы не можете унаследовать класс из структуры.
Закрытые методы и свойства
Вы также можете использовать модификатор
sealed
для метода или свойства, которое переопределяет виртуальный метод или свойство базового класса. Это позволяет вам разрешать классам наследовать от вашего класса, но не позволяет другим разработчикам, использующим ваши классы, переопределять определенные виртуальные методы и свойства.class XЗачем использовать закрытые классы?
{
protected virtual void F()
{
Console.WriteLine("X.F");
}
protected virtual void F2()
{
Console.WriteLine("X.F2");
}
}
class Y : X
{
sealed protected override void F()
{
Console.WriteLine("Y.F");
}
protected override void F2()
{
Console.WriteLine("Y.F2");
}
}
class Z : Y
{
// Попытка переопределить F приводит к ошибке компиляции CS0239.
protected override void F()
{
Console.WriteLine("C.F");
}
// Допустимо переопределить F2
protected override void F2()
{
Console.WriteLine("Z.F2");
}
}
Основная цель закрытого класса состоит в том, чтобы запретить наследование от класса. Один из лучших вариантов использования закрытых классов - это класс со статическими членами. Например, классы
Pens
и Brushes
в пространстве имен System.Drawing
. Класс Pens
представляет ручки со стандартными цветами. Этот класс имеет только статические члены. Например, Pens.Blue
представляет собой ручку синего цвета. Аналогично, класс Brushes
представляет стандартные кисти. Brushes.Red
представляет собой кисть с красным цветом.Если класс не предназначен для наследования, подклассы могут нарушать инварианты класса. Поэтому, как правило, рекомендуется закрывать любой класс, явно не предназначенный для наследования от него.
В библиотеке классов Microsoft наследование ограничено только теми местами, где оно действительно имеет смысл. Очень многие классы, например
String
, закрыты. Ключевое слово sealed
сообщает CLR, что ниже по иерархии нет классов для поиска методов, что повышает производительность.Источники:
- https://www.c-sharpcorner.com
- https://stackoverflow.com/questions/7777611/when-and-why-would-you-seal-a-class