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