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 方法。
相关推荐
橙子圆12314 小时前
java之拦截器和适配器模式
java·开发语言
星辰徐哥14 小时前
Unity C#入门:变量的定义与访问权限(public/private)
unity·c#·lucene
lifewange14 小时前
Claude Code可以安装在IDEA和Pycharm中么
java·pycharm·intellij-idea
lifewange14 小时前
OpenCode可以安装在IDEA和Pycharm中么
java·pycharm·intellij-idea
leoufung14 小时前
LeetCode 30:Substring with Concatenation of All Words 题解(含 C 语言 uthash 实现)
c语言·leetcode·c#
hacker70714 小时前
Visual Studio安装教程(C#开发版)
ide·c#·visual studio
untE EADO14 小时前
Java进阶之路,Java程序员职业发展规划
java·开发语言
yqcoder14 小时前
CSS 迷思破解:`:nth-child` vs `:nth-of-type`
前端·css
时寒的笔记14 小时前
某陆飞11期_webpack案例
前端·webpack·node.js
长河14 小时前
基于 Jib 实现无 Dockerfile 的 Spring Boot 应用容器化
java·spring boot·后端