使用 new 明確隱藏繼承自基類的同名成員。不隱藏也合法,但編譯器會發出警告 (CS0108);加上 new 可消除警告,表示「刻意隱藏」。
class Base
{
public void Print() => Console.WriteLine("Base");
}
class Derived : Base
{
new public void Print() => Console.WriteLine("Derived (new)");
}
class Test
{
static void Main()
{
Base b = new Base(); b.Print(); // Base
Derived d = new Derived(); d.Print(); // Derived (new)
Base bd = new Derived(); bd.Print(); // Base (非虛擬,靜態繫結)
}
}
| 關鍵字 | 用途 | 繫結時機 | 多型行為 |
|---|---|---|---|
virtual | 基類宣告可被覆寫 | 執行期 | 是 |
override | 衍生類覆寫虛擬/抽象/override 成員 | 執行期 | 是 |
abstract | 強制衍生類實作,無本體 | 執行期 | 是 |
new | 隱藏基類同名成員 (非多型) | 編譯期 | 否 |
override 非 virtual/abstract/override 成員 → 編譯錯誤。new 和 override → 編譯錯誤。override 改變存取層級 (如 protected override 改 public) → 編譯錯誤。