在对C#类的继承中,经常要用到overrid和new来满足新类自己的方法,C#提供了overrid来重写基类的方法,这样,新继承的类就有和基类相同的函数索引,但却有自己的实现方式,这样在新类实例中调用该方法,也就只调用自己重新写过的方法了。使用方法只要在该函数名前加上overrid就行了。
         而使用new方法却和overrid有点不一样,new关键字可以显式隐藏从基类继承的成员,隐藏继承的成员意味着该成员的派生版本将替换基类版本,这里我个人理解是:它只是一种蕴藏,派生类从基类继承过来的其他方法调用关系中,仍然是在调用该方法,而不会调用用户使用new关键字新生成的方法,也就是基类的该旧方法还是存在的,而派生类又新增加了自己的一个类似方法。比如,在windows form 编程时,使用的OnResize方法,如果像下面这样写:

1protected override void OnResize(EventArgs e)
2        {
3            Invalidate();
5        }

该函数中的Invalidate();提示应用程序,窗体需要刷新。每次拉动窗体使其变大或缩小时,都会刷新窗体,这是应为我重写了Form类中的OnResize方法,这样Form窗体大小发生变化时就会调用我重写过的函数,而不是基类的OnResize。
如果使用new方法,如下:

        protected new void OnResize(EventArgs e)
        
{
            Invalidate();

        }
你会发现,当你拉动窗体,使其发生大小改变时,窗体并不会刷新,这是应为窗体调用的是基类继承下来的OnResize,而不是调用上面用new关键字生成的新的OnResize,这就是new和overrid的区别所在。

如果你在做本实验时看不出效果,建议可以添加一个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, 
0100);
}
该代码是本人在学习Wndows From编程是从《Programming Microsoft Windows with C#》这本书上摘下来的。
posted on 2007-08-10 14:35  烂人  阅读(1386)  评论(1)    收藏  举报