在衍生類以 new 宣告同名成員,隱藏基類實作:
public class MyBaseC { public void Invoke() { } }
public class MyDerivedC : MyBaseC { new public void Invoke() { } }
new 與 override 不能同時使用。
5. 未實際隱藏任何成員卻使用 new 會產生編譯警告。
public class MyBaseC
{
public class MyClass { public int x = 200; public int y; }
}
public class MyDerivedC : MyBaseC
{
new public class MyClass // 隱藏基類巢狀類型
{
public int x = 100; public int y; public int z;
}
public static void Main()
{
MyClass s1 = new MyClass(); // 衍生類版本 x=100
MyBaseC.MyClass s2 = new MyBaseC.MyClass(); // 基類版本 x=200
Console.WriteLine(s1.x); // 100
Console.WriteLine(s2.x); // 200
}
}
100 200
new 消除警告並明確語意。virtual/override 而非 new。Base.Nested 存取被隱藏版本。