1 回答

TA貢獻(xiàn)1852條經(jīng)驗 獲得超7個贊
由于方法是virtual,將調(diào)用正確的版本。起作用的機(jī)制稱為多態(tài)性。
事實上CreateDocument,甚至不需要是虛擬的就可以工作(除非你打算在另一個基類中覆蓋它)。
您可以在一個簡單的測試程序中看到它(請注意,我編寫的程序CreatePage protected不能從外部DocumentWriter或其基類調(diào)用)。請注意,即使我CreateDocument通過基類類型顯式調(diào)用,它也將始終根據(jù)對象的運(yùn)行時類型調(diào)用正確的版本。
public class DocumentWriter
{
public /*virtual*/ void CreateDocument()
{
CreatePage();
}
protected virtual void CreatePage()
{
System.Console.WriteLine("DocumentWriter.CreatePage()");
}
}
public class PdfDocumentWriter : DocumentWriter
{
protected override void CreatePage()
{
System.Console.WriteLine("PdfDocumentWriter.CreatePage()");
}
}
public class HtmlDocumentWriter : DocumentWriter
{
protected override void CreatePage()
{
System.Console.WriteLine("HtmlDocumentWriter.CreatePage()");
}
}
public static class Program
{
public static void Main()
{
DocumentWriter documentWriter = new PdfDocumentWriter();
documentWriter.CreateDocument();
// Re-use the same variable.
// CreateDocumentwill still call the correct version of CreatePage.
documentWriter = new HtmlDocumentWriter();
documentWriter.CreateDocument();
}
}
這打印
PdfDocumentWriter.CreatePage()
HtmlDocumentWriter.CreatePage()
正如預(yù)期的那樣。
- 1 回答
- 0 關(guān)注
- 187 瀏覽
添加回答
舉報