”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 虚拟/覆盖与c#中的新事物:我什么时候应该使用哪个关键字进行方法覆盖?

虚拟/覆盖与c#中的新事物:我什么时候应该使用哪个关键字进行方法覆盖?

发布于2025-02-06
浏览:724

Virtual/Override vs. New in C#: When Should I Use Which Keyword for Method Overriding?

C# 中的 virtual/override 与 new 关键字:何时使用哪个关键字进行方法重写?

在基类中定义方法时,程序员常常面临是否使用“virtual”或“new”关键字的难题。这个决定会显着影响派生类中方法重写的行为。

Virtual Override

在基类方法中使用“virtual”关键字表示它可以在派生类中被重写。要重写该方法,派生类必须使用“override”关键字。这确保了重写的方法按预期工作,维护继承层次结构和多态性。

当派生类调用重写的方法时,它将执行重写版本,即使持有对象的引用变量是基类类型。这称为后期绑定,并允许动态行为。

New 关键字

相反,派生类方法中的“new”关键字声明一个新方法,该方法隐藏具有相同名称的继承方法。使用时,新方法在派生类中替换继承方法,从而破坏多态性。

当派生类调用用“new”声明的方法时,它将执行该新方法,而不管持有对象的引用变量的类型如何。这被认为是早期绑定,并阻碍多态性。

示例

考虑以下代码示例:

public class Base
{
    public virtual bool DoSomething() { return false; }
}

public class Derived : Base
{
    public new bool DoSomething() { return true; }
}

如果您将 Derived 的实例分配给 Base 类型的变量并调用 DoSomething(),则如果使用 virtual/override,结果将为 false,但如果使用 new,则结果为 true。这突出了后期绑定和早期绑定之间的区别。

最新教程 更多>
  • 如何从Maven存储库中下载源罐子和Javadocs?
    如何从Maven存储库中下载源罐子和Javadocs?
    [2 ]步骤1:下载源代码执行以下命令,以下载所有项目依赖项的源代码: mvn dependenty:sources 步骤2 : Download JavadocsTo download Javadocs, use the following command:mvn dependency:resol...
    编程 发布于2025-02-06
  • 在映射到MySQL枚举列时,如何确保冬眠保留值?
    在映射到MySQL枚举列时,如何确保冬眠保留值?
    在hibernate中保存枚举值:故障排除错误的列type ,他们各自的映射至关重要。在Java中使用枚举类型时,至关重要的是,建立冬眠的方式如何映射到基础数据库。在您的情况下,您已将MySQL列定义为枚举,并在Java中创建了相应的枚举代码。但是,您遇到以下错误:“ MyApp中的错误列类型。...
    编程 发布于2025-02-06
  • 如何将HTML字符串转换为DOM元素以将其附加到DOM树上?
    如何将HTML字符串转换为DOM元素以将其附加到DOM树上?
    将html字符串转换为dom elements 可以使用Domparser类,如下所示: var xmlString =“< div> [&& && && &&&华[&华[&&华使用标准DOM方法。
    编程 发布于2025-02-06
  • 哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    在Python 射线tracing方法Matplotlib's path.contains_points FunctionMatplotlib's path.contains_points function employs a路径对象表示多边形。它检查给定点是否位于定义路径内。 T...
    编程 发布于2025-02-06
  • 如何在Java列表中有效计算元素的发生?
    如何在Java列表中有效计算元素的发生?
    计数列表中的元素出现在列表 中,在java编程中,列举列表中列举元素出现的任务来自列表。为此,收集框架提供了全面的工具套件。在这种情况下,Batocurrences变量将保持值3,代表动物列表中的“ BAT”出现的数量。 &&& [此方法是简单的,可以得出准确的结果,使其成为计算列表中元素出现的理...
    编程 发布于2025-02-06
  • 为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    [2明确担心Microsoft Visual C(MSVC)在正确实现两相模板实例化方面努力努力。该机制的哪些具体方面无法按预期运行?背景:说明:的初始Syntax检查在范围中受到限制。它未能检查是否存在声明名称的存在,导致名称缺乏正确的声明时会导致编译问题。为了说明这一点,请考虑以下示例:一个符合...
    编程 发布于2025-02-06
  • 'exec()
    'exec()
    Exec对本地变量的影响: exec function,python staple,用于动态代码执行的python staple,提出一个有趣的Query:它可以在函数中更新局部变量吗? python 3 Dialemma 在Python 3中,以下代码shippet无法更新本地变量,因为人们...
    编程 发布于2025-02-06
  • 如何使用PHP从XML文件中有效地检索属性值?
    如何使用PHP从XML文件中有效地检索属性值?
    从php 您的目标可能是检索“ varnum”属性值,其中提取数据的传统方法可能会使您感到困惑。 - > attributes()为$ attributeName => $ attributeValue){ echo $ attributeName,'=“',$ at...
    编程 发布于2025-02-06
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-02-06
  • 如何使用Python的记录模块实现自定义处理?
    如何使用Python的记录模块实现自定义处理?
    使用Python的Loggging Module 确保正确处理和登录对于疑虑和维护的稳定性至关重要Python应用程序。尽管手动捕获和记录异常是一种可行的方法,但它可能乏味且容易出错。解决此问题,Python允许您覆盖默认的异常处理机制,并将其重定向为登录模块。这提供了一种方便而系统的方法来捕获和...
    编程 发布于2025-02-06
  • 如何从Google API中检索最新的jQuery库?
    如何从Google API中检索最新的jQuery库?
    从Google APIS 问题中提供的jQuery URL是版本1.2.6。对于检索最新版本,以前有一种使用特定版本号的替代方法,它是使用以下语法: https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js(google hosted...
    编程 发布于2025-02-06
  • 为什么使用Firefox后退按钮时JavaScript执行停止?
    为什么使用Firefox后退按钮时JavaScript执行停止?
    导航历史记录问题:JavaScript使用Firefox Back Back 此行为是由浏览器缓存JavaScript资源引起的。 To resolve this issue and ensure scripts execute on subsequent page visits, Firefox...
    编程 发布于2025-02-06
  • 如何检索SQL中每个用户的最新登录日期?
    如何检索SQL中每个用户的最新登录日期?
    SQL查询每个用户的最后登录记录日期 问题: 假设数据库表包含用户登录信息,我们如何检索每个用户的最后登录日期?考虑到可能存在重复的登录日期。 解决方案: 解决此问题有两种常见方法: 方法一:使用INNER JOIN的子查询 此方法利用子查询来识别每个用户的最后登录日期,然后用于过滤主表: sel...
    编程 发布于2025-02-06
  • 如何有效处理Java中的时区转换?
    如何有效处理Java中的时区转换?
    跨时区的时区转换 java.util.date类缺乏明确的时区分配。它的Tostring方法误导了JVM的默认时区,导致混乱。为了避免这些陷阱,现代Java利用Java.Time软件包进行更健壮的时间处理。 在Java.Time中转换时区,指定一个时区并调用ZonedDateTime.now方法...
    编程 发布于2025-02-06
  • 为什么我的烧瓶应用程序会抛出“ templatenotfound”错误,即使我的模板文件存在?
    为什么我的烧瓶应用程序会抛出“ templatenotfound”错误,即使我的模板文件存在?
    故障排除flask的templatenotfound错误 在尝试在flask中渲染模板,例如'home.html',您可能会遇到''''',您可能会遇到''' jinja2.exceptions.templatenot...
    编程 发布于2025-02-06

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3