C# 中 `new` 关键字的用法

在 C# 中,new 关键字用于修饰方法、属性、索引器或事件声明时,表示当前成员隐藏基类中同名的成员。它们之间的具体区别如下:

  1. 不加 new

    • 如果子类定义了一个与父类同名的方法,但没有使用 new 关键字,编译器会发出警告,提示你可能无意中隐藏了基类的方法。
    • 这种情况下,子类的方法仍然会隐藏基类的方法,但调用时如果使用的是基类引用,将调用基类的方法。
  2. new

    • 明确表示子类的方法有意隐藏基类中的同名方法。
    • 编译器不会发出警告,因为你知道自己在做什么。
    • 调用时如果使用的是基类引用,仍然会调用基类的方法;如果使用的是子类引用,则会调用子类的方法。

下面是一个示例代码:

csharp 复制代码
using System;

class BaseClass {
    public void show() {
        Console.WriteLine("BaseClass show");
    }
}

class DerivedClass : BaseClass {
    // 使用 new 关键字隐藏基类方法
    public new void show() {
        Console.WriteLine("DerivedClass show");
    }
}

class Program {
    static void Main(string[] args) {
        BaseClass baseObj = new DerivedClass();
        baseObj.show();  // 输出: BaseClass show

        DerivedClass derivedObj = new DerivedClass();
        derivedObj.show();  // 输出: DerivedClass show
    }
}

在这个例子中:

  • 当使用 BaseClass 类型的引用调用 show 方法时,即使对象是 DerivedClass 的实例,也会调用基类的 show 方法。
  • 当使用 DerivedClass 类型的引用调用 show 方法时,会调用子类的 show 方法。
相关推荐
山楂树の3 分钟前
图像标注大坑:img图片 + Canvas 叠加标注,同步放大后标注位置偏移、对不齐?详解修复方案及亚像素处理原理
前端·css·学习·canva可画
本山德彪6 分钟前
我做了一个拼豆图纸生成器,把照片秒变图纸
前端
one_love_zfl6 分钟前
java面试-微服务组件篇
java·微服务·面试
一只大袋鼠9 分钟前
Java进阶:CGLIB动态代理解析
java·开发语言
Eiceblue18 分钟前
使用 C# 将 Excel 转换为 Markdown 表格(含批量转换示例)
开发语言·c#·excel
环流_23 分钟前
HTTP 协议的基本格式
java·网络协议·http
爱滑雪的码农24 分钟前
Java基础十三:Java中的继承、重写(Override)与重载(Overload)详解
java·开发语言
【 】42327 分钟前
C++&STL(Standard Template Library,标准模板库)
java·开发语言·c++
茉莉玫瑰花茶28 分钟前
LangChain 核心组件 [ 2 ]
java·数据库·langchain
DTrader32 分钟前
用TS无法实盘量化? - 实盘均线策略
前端·api