在 C# 中的 new 關鍵字,除了能夠當作建立 instance、呼叫 constructor 的運算子 (operator) 外,亦可作為「隱藏;遮蔽 (shadow)」用的修飾詞 (modifier),並可用來修飾 method、property、field,以及「巢狀類 (nested class)」裡面的 class。
在「父類 (base class)」、「子類 (derived class)」中若存在同名的 field,在 Java 中預設會由子類的 field 直接 shadow 父類的 field (Java 沒有 .NET 的 property,Java 的 field 又可稱為 variable);而在 C# 中,則應在子類的 field 前面,加上 new 修飾詞 (在 VB.NET 中為 Shadows)。若您不加的話,程序仍然能夠編譯及執行,但會得到一項警告訊息。在 C# 中,您仍可用 base 關鍵字去引用父類的 field。










代碼 1 field shadowing
同名 field 談完,接下來再談同名 method。在父類、子類中若存在同名的 method,則在子類中的 method 前加上 new 修飾詞,可隱藏父類的 method,其作用就如同用 override 關鍵字,去「覆寫」掉父類中同名的 virtual method。若您不加的話,和 field 一樣,程序仍然能夠編譯及執行,但會得到一項警告訊息。
在 method 中會需要使用 new 修飾詞,而不用 override,通常是因為有三層以上的繼承關係,並且因程序需求,需要替「再衍生的類 (孫類)」提供新的同名 virtual method,而非「覆寫」掉父類該版本的 method。如下方關係圖:
父類的同名方法(virtual) ← 子類的同名方法(new+virtual) ← 孫類的同名方法(override)
上方三個 class 為繼承關係,皆有同名的 method,且在子類中的 method 加上了 new 修飾詞,因此會重新定義(隱藏) 在父類中宣告為 virtual 的 method,提供孫類一個「全新的」同名 method,而非最頂層父類的版本。
有興趣進一步瞭解的網友,可參考 msdn 的文件,例如這篇原文文件:
http://msdn.microsoft.com/en-us/library/51y09td4(VS.71).aspx
In C#, the new keyword can be used as an operator or as a modifier.
* new operator Used to create objects on the heap and invoke constructors.
* new modifier Used to hide an inherited member from a base class member.
-------------------------------------------------
(本文在版工的舊 Blog 中,發表日期為 2006/10/11)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)