在对C#类的继承中,经常要用到overrid和new来满足新类自己的方法,C#提供了overrid来重写基类的方法,这样,新继承的类就有和基类相同的函数索引,但却有自己的实现方式,这样在新类实例中调用该方法,也就只调用自己重新写过的方法了。使用方法只要在该函数名前加上overrid就行了。
而使用new方法却和overrid有点不一样,new关键字可以显式隐藏从基类继承的成员,隐藏继承的成员意味着该成员的派生版本将替换基类版本,这里我个人理解是:它只是一种蕴藏,派生类从基类继承过来的其他方法调用关系中,仍然是在调用该方法,而不会调用用户使用new关键字新生成的方法,也就是基类的该旧方法还是存在的,而派生类又新增加了自己的一个类似方法。比如,在windows form 编程时,使用的OnResize方法,如果像下面这样写:
1
protected override void OnResize(EventArgs e)
2
{
3
Invalidate();
5
}
protected override void OnResize(EventArgs e)2
{3
Invalidate();5
}该函数中的Invalidate();提示应用程序,窗体需要刷新。每次拉动窗体使其变大或缩小时,都会刷新窗体,这是应为我重写了Form类中的OnResize方法,这样Form窗体大小发生变化时就会调用我重写过的函数,而不是基类的OnResize。
如果使用new方法,如下:
protected new void OnResize(EventArgs e)
{
Invalidate();
}如果你在做本实验时看不出效果,建议可以添加一个overrid过的OnPaint函数
protected override void OnPaint(PaintEventArgs e)
{
string str = "Form Control Information: \nLocation:" + Location + "\n"
+ "Size: " + Size + "\n"
+ "Bounds: " + Bounds + "\n"
+ "Width: " + Width + "\n"
+ "Height: " + Height + "\n"
+ "Left: " + Left + "\n"
+ "Top: " + Top + "\n"
+ "Right: " + Right + "\n"
+ "Bottom: " + Bottom + "\n"
+ "DesktopLocation: " + DesktopLocation + "\n"
+ "DesktopBounds: " + DesktopBounds + "\n"
+ "ClientSize: " + ClientSize + "\n"
+ "ClientRectangle: " + ClientRectangle + "\n";
e.Graphics.DrawString(str, Font, Brushes.Black, 0, 100);
}

浙公网安备 33010602011771号