Одно из практических применений, где я нашел полезное запечатанное ключевое слово, состоит в том, чтобы избежать "Хрупких проблем класса". Вот видео, которое показывает одну из уязвимых проблем базового класса http://www.youtube.com/watch?v=xnA3RUJcyY4
Позвольте мне объяснить немного подробнее.
Рассмотрим приведенный ниже сценарий, в котором у нас есть родительский класс, называемый «DbParent», с виртуальным методом «Insert».
класс DbParent
{
public virtual void Insert()
{
Console.WriteLine("Parent insert");
}
}
Ниже приведен простой дочерний класс со своей собственной реализацией «Вставка», которая устанавливается в различных местах.
class DbChildClass : DbParent
{
public void Insert()
{
Console.WriteLine("Child inserts");
}
}
Теперь, скажем, после нескольких месяцев развертывания разработчики родительских классов, не понимая влияния на дочерние классы, идут и добавляют новый метод «Добавить». Этот метод «Add» вызывает метод «Insert» для внутреннего использования (ниже приведен фрагмент кода для того же самого).
class DbParent
{
public void Add() // Adds method with out consulting
{
this.Insert();
}
public virtual void Insert()
{
Console.WriteLine("Parent insert");
}
}
Теперь клиентские программы, которые вызывают метод «Add» путем создания объектов дочернего класса, ожидают, что должна быть вызвана реализация «Insert» класса «Child».
DbChildClass o = new DbChildClass();
o.Add();
Console.Read();
Но, чёрт возьми, если вы запустите приведенный ниже код, вы увидите, что родительский класс «Вставить» называется, который НЕ ОЖИДАЕТСЯ.
Поэтому я бы пошел и пометил класс как «Запечатанный», чтобы избежать подобных проблем.