using system ; class a { public virtual void f( ) { console.writeline("a.f") ; } public virtual void g( ) { console.writeline("a.g") ; } } class b: a { sealed override public void f( ) { console.writeline("b.f") ; } override public void g( ) { console.writeline("b.g") ; } } class c: b { override public void g( ) { console.writeline("c.g") ; } }
注意:在同一成员上同时使用 new 和 override 是错误的。同时使用 new 和 virtual 可保证一个新的专用化点。在不隐藏继承成员的声明中使用 new 修饰符将发出警告。
示例1:在该例中,基类 mybasec 和派生类 myderivedc 使用相同的字段名 x,从而隐藏了继承字段的值。该例说明了 new 修饰符的使用。同时也说明了如何使用完全限定名访问基类的隐藏成员。
using system ; public class mybase { public static int x = 55 ; public static int y = 22 ; } public class myderived : mybase { new public static int x = 100; // 利用new 隐藏基类的x public static void main() { // 打印x: console.writeline(x); //访问隐藏基类的 x: console.writeline(mybase.x); //打印不隐藏的y: console.writeline(y); } }
输出: 100 55 22
如果移除 new 修饰符,程序将继续编译和运行,但您会收到以下警告:
the keyword new is required on 'myderivedc.x' because it hides inherited member 'mybasec.x'.