下のクラスについて質問です。
Photo
クラスはから継承しForm
、イメージを持っているため、コンストラクターに従ってクラスのオブジェクトを作成するとPhoto
、仮想Drawer
メソッドのためにイメージが描画されます。
BorderedPhoto
クラスを継承するクラスがあり、写真画像の周りにボーダーを設定するPhoto
オーバーライドメソッドもあります。Drawer()
プログラムは正常に実行されていますが、BorderedPhoto
Photo クラス オブジェクトを参照してクラスのオブジェクトを作成すると、Drawer()
明示的に呼び出していないにもかかわらず、Bordered クラスのオーバーライドと呼ばれる理由が混乱します。
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);
}
}