您的位置:知识库 »

谈谈C#中的三个关键词new , virtual , override

作者: Winner.Net  来源: 博客园  发布时间: 2008-09-08 21:41  阅读: 11528 次  推荐: 0   原文链接   [收藏]  

     最后我们再说说关键词之间的搭配关系,上面已经给出了virtual和override不兼容的几个关键词,这里就不重复了。我要说的是new和virtual在声明函数时,其实可以一块使用。因为这个函数是新的,故与其它任何new函数一样,隐藏了具有相同原型的继承来的函数。因为这个函数也是虚拟的,所以可以在派生类中进一步复位义,这样就为这个虚拟函数建立了一个新的基级别。最后用GrandsonClass类来看看。

Code

    运行结果为:
    BaseClassPrint
    InheritClassPrint
    BaseClassPrint
    可见在InheritClass中使用了new以后,就意味着它与基类的同名方法为两个不同方法了,而它又是虚拟的,所以它的子类还可以继续继承BaseClass的Print()方法。
    将函数声明为virtual 与将它声明为new virtual是一样的,因为new仍然是默认的。所以下面的两句是相同的:
    public new virtual void Print(); public virtual void Print();
    那么new virtual的意义又在什么地方呢?在大型的层次结构中,这可能很有用,比如如下的System.Windows.Form类的继承关系Object->MarshalByRefObject->Component->Control->ScrollableControl->
ContainerControl。
    很容易想象出将一个派生的窗体集合作为窗体对待,而不是作为Object的情形。
再将Program.cs修改如下:
Code

 

运行结果为:
BaseClassPrint
InheritClassPrint
BaseClassPrint
GrandsonClassPrint
0
0

热门文章

    最新文章

      最新新闻

        热门新闻