Я пытаюсь создать библиотеку для MigraDoc на основе этого примера, который поддерживает различные типы документов. Моя идея состояла в том, чтобы создать базовый класс с виртуальным методом для CreatePage()
(метод, отвечающий за макет страницы). Однако концепция заключалась в том, что CreatePage()
следует вызывать из метода с именем CreateDocument()
, который вызывается пользователем. Увы, CreatePage()
можно будет переопределить, но он не предназначен для прямого вызова. Это будет выглядеть примерно так:
public class DocumentWriter
{
private Document document;
public virtual void CreateDocument(IDocumentArgs args)
{
document = new Document();
DefineStyles();
CreatePage();
FillContent(args);
}
public virtual void CreatePage()
{
// Create page layout here
}
// Remaining code skipped for readability...
}
Но если создать унаследованный класс, который переопределяет CreatePage()
, то какой метод будет вызываться из CreateDocument()
?
- Оригинальный виртуальный (не переопределенный) метод
- Метод, который переопределяет
CreatePage()
CreatePage()
напрямую из другого кода, вы можете использовать модификаторprotected
- person rum   schedule 20.06.2018ovderride
, чтобы иметь возможность перезаписать базовую реализацию. В любом случае вы можете просто попробовать это сами, написав тестовую программу с некоторым виртуальным членом и проверив, какой член вызывается, когда вы переопределяете его в своем классе. - person HimBromBeere   schedule 20.06.2018