Вы можете получить ключевое слово sealed
для работы с методом в абстрактном классе, сделав сам этот абстрактный класс производным от чего-то:
abstract class DocumentTemplateBase
{
public abstract void WriteTitle();
public abstract void WriteSections();
}
abstract class DocumentTemplate : DocumentTemplateBase
{
public override sealed void WriteTitle()
{
Console.WriteLine("Project document");
}
public override sealed void WriteSections()
{
Console.WriteLine("Sections");
}
abstract public void WriteContent();
}
Все еще выводим ваш конкретный класс из исходного (и теперь производного) абстрактного класса:
class Document1_FromTemplate : DocumentTemplate
{
public override void WriteTitle() //error!
{
Console.WriteLine("Project1 document");
}
"не может переопределить унаследованный элемент" Dynamics.DocumentTemplate.WriteTitle () ', потому что он запечатан "
Однако ничто не может помешать реализатору new
сделать это:
class Document1_FromTemplate : DocumentTemplate
{
public new void WriteTitle() //sorry! can't stop it!
{
Console.WriteLine("Project1 document");
}