Без виртуальных функций для переопределения нет особого смысла в создании подкласса запечатанного класса.
Если вы попытаетесь написать запечатанный класс с виртуальной функцией, вы получите следующую ошибку компилятора:
// error CS0549: 'Seal.GetName()' is a new virtual member in sealed class 'Seal'
Однако вы можете поместить виртуальные функции в запечатанные классы, объявив их в базовом классе (как этот),
public abstract class Animal
{
private readonly string m_name;
public virtual string GetName() { return m_name; }
public Animal( string name )
{ m_name = name; }
}
public sealed class Seal : Animal
{
public Seal( string name ) : base(name) {}
}
Хотя проблема все еще остается, я не вижу, как вы могли бы прокрасться мимо компилятора, чтобы позволить вам объявить подкласс. Я пытался использовать IronRuby (ruby - самый хакерский из всех хакерских языков), но даже он не позволил мне.
«Запечатанная» часть встроена в MSIL, поэтому я предполагаю, что сам CLR фактически обеспечивает это. Вам нужно будет загрузить код, разобрать его, удалить запечатанный бит, затем снова собрать и загрузить новую версию.