C#中的new修饰符说明
new修饰符主要是用来隐藏从基类继承的成员. 这句话怎么理解呢,就是说有一个类,它有一个继承类,继承类中存在和基类中一样名称的成员(属性,方法等). 对继承类中的该成员使用new修饰符时,调用时将会隐藏其基类中的该成员
举个例子如下:
public class BaseC { public int x; public void MyTest() {} } public class DerivedC : BaseC { public new void MyTest() {} }
类DerivedC继承类BaseC,在继承类中有一个和基类中同名的方法MyTest(), 使用new修饰符隐藏了基类的MyTest()方法。基类BaseC的字段x不受影响,因为没有使用类似名称将其隐藏.
另外,对同一个成员同时使用new和override是错误的做法,因为这两个修饰符的含义互斥。
new修饰符和override修饰符的区别
new修饰符 --- 以同样的名称创建一个新成员并使原始成员变为隐藏
override修饰符 --- 扩展继承成员的实现
再举一个例子:
public class BaseC { public static int x = 45; public static int y =15; } public class DerivedC : BaseC { //Hide field 'x' new public static int x = 75; static void Main() { //display the new value of x Console.WriteLine(x); // display the hidden value of x Console.WriteLine(BaseC.x); //display the unhidden member y Console.WriteLine(y); } } /* output: 75 45 15 */
下面再举一个嵌套类的例子
public class MyBaseClass { public class MyNestedClass { public int x = 2000; public int y; } } public class MyDerivedClass : MyBaseClass { //Nested type hiding the base type members new public class MyNestedClass { public int x = 1000; public int y; public int z; } static void Main() { //creating an object from the overlapping class MyNestedClass myClass1 = new MyNestedClass (); //Creating an object from the hidden class MyBaseClass.MyNestedClass myClass2 = new MyBaseClass.MyNestedClass() Console.WriteLine(myClass1.x); Console.WriteLine(myClass2.x); } } /* Output 1000 2000 */
如果在继承类MyDerivedClass的嵌套类MyNestedClass中移除new修饰符,程序一样会编译和运行,但你将会收到以下警告
The keyword new is required on 'MyDerivedClass.x' because it hides inherited member 'MyBaseClass.x'.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2017-06-29 SQL Server中的聚集索引(clustered index) 和 非聚集索引 (non-clustered index)