[英]C# Virtual Function
我對下面的課有疑問。
Photo
類繼承自Form
並且有一個圖像,因此當我按照構造函數創建Photo
類的對象時,它會因為虛擬Drawer
方法而繪制圖像。
BorderedPhoto
類繼承自Photo
類,並且還具有覆蓋方法Drawer()
,用於在照片圖像周圍設置邊框。
該程序運行正常,但我的困惑是當我通過提供Photo類對象創建BorderedPhoto
類的對象,然后為什么它被稱為Bordered類的覆蓋Drawer()
,即使它沒有顯式調用它。
class Photo:Form
{
Image image;
public Photo()
{
image= new Bitmap(@"C:\Jug_7.jpg");
this.Text = "My Water Jug";
this.Paint+= new PaintEventHandler(Drawer);
}
public virtual void Drawer(object source, PaintEventArgs e)
{
e.Graphics.DrawImage(image, 20, 20);
}
}
class BorderedPhoto : Photo
{
Photo photo;
Color color;
public BorderedPhoto(Photo p, Color c)
{
photo = p;
color = c;
}
public override void Drawer(object source, PaintEventArgs e)
{
base.Drawer(source, e);
e.Graphics.DrawRectangle(new Pen(color, 10), 25, 15, 215, 225);
}
}
該程序運行正常,但我的困惑是當我通過引用Photo類對象創建BorderedPhoto類的對象,然后為什么它被稱為覆蓋抽象類的抽象(),盡管它沒有顯式調用它。
所以我認為這意味着......
Photo p = new BorderedPhoto();
好吧,這就是多態性的全部意義。 如果在調用多態方法時必須限定基礎類型,那么重點是什么? 此行為允許您通過共享接口使用不同的實現。
此外,因為你調用base.Drawer(source, e);
在覆蓋內部,也將調用基類實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.