Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Sealed-классы и sealed-методы в C#: когда использовать, примеры и повышение безопасности кода

Понимание sealed-классов и sealed-методов в C#

Это руководство объясняет, как использовать ключевое слово sealed для ограничения наследования и переопределения методов в C#, с практическими примерами кода.

Sealed-класс

В C# ключевое слово sealed предотвращает наследование класса. Sealed-класс никогда не может иметь производный тип.

Пример:

using System;
namespace SealedClass {
    sealed class Animal { }
    // Попытка унаследовать sealed-класс вызывает ошибку компиляции
    class Dog : Animal { }
    class Program {
        static void Main(string[] args) {
            // создание объекта Dog
            Dog d1 = new Dog();
            Console.ReadLine();
        }
    }
}

Компилятор выдает:

error CS0509: 'Dog': cannot derive from sealed type 'Animal'

Sealed-метод

При переопределении виртуального метода можно захотеть запретить дальнейшее переопределение в производных классах. Добавьте sealed перед override для этого.

Пример:

using System;
namespace SealedClass {
    class Animal {
        public virtual void MakeSound() {
            Console.WriteLine("Animal Sound");
        }
    }
    class Dog : Animal {
        // Sealed-переопределение
        sealed public override void MakeSound() {
            Console.WriteLine("Dog Sound");
        }
    }
    class Puppy : Dog {
        // Попытка переопределить sealed-метод вызывает ошибку компиляции
        public override void MakeSound() {
            Console.WriteLine("Puppy Sound");
        }
    }
    class Program {
        static void Main(string[] args) {
            // создание объекта Puppy
            Puppy d1 = new Puppy();
            Console.ReadLine();
        }
    }
}

Результирующая ошибка:

error CS0239: 'Puppy.MakeSound()': cannot override inherited member 'Dog.MakeSound()' because it is sealed

Совет: Запечатывание (sealing) переопределенного метода останавливает дальнейшее переопределение в многоуровневой цепочке наследования.


Зачем использовать sealed-классы?

  1. Безопасность и целостность — sealed-класс нельзя расширить, поэтому его поведение остается предсказуемым и не может быть изменено подклассами.
  2. Производительность — среда выполнения может агрессивнее оптимизировать sealed-типы, зная, что подклассов нет.
  3. Статические утилитарные типы — многие библиотеки предоставляют статические члены через sealed-классы (например, Pens в System.Drawing).

Например, класс Pens предоставляет предварительно настроенные экземпляры Pen для стандартных цветов:

Pen bluePen = Pens.Blue; // представляет синюю перо

Поскольку Pens запечатан, его статические члены не могут быть переопределены или изменены другими типами.

Язык C

  1. Классы и объекты в C#: Фундаменты надёжного ООП
  2. Абстрактные классы и методы в C#: практическое руководство
  3. Частичные классы и методы в C#: понимание и применение
  4. Классы и объекты в C++: практическое руководство по объектно-ориентированному программированию
  5. Дружественные функции и классы в C++: мастерство контроля доступа
  6. Java: объекты, классы и основные концепции ООП
  7. Наследование в C#: базовые и производные классы, интерфейсы
  8. Полиморфизм в C#: статический и динамический, перегрузка и переопределение
  9. ASTM A729 Class A: Свойства дважды нормализованной и отпущенной стали
  10. ASTM A649 Class 2: Спецификации нормализованной и отпущенной конструкционной стали