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'.