防止 C# 子类覆盖方法

2023-11-27

假设我有一个名为“Parent”的抽象父类,它实现了一个名为“DisplayTitle”的方法。我希望这个方法对于继承“Parent”的每个子类都是相同的 - 如果子类尝试实现自己的“DisplayTitle”方法,我希望出现编译错误。我怎样才能在 C# 中完成这个任务。我相信 Java,我只是将该方法标记为“final”,但我似乎无法在 C# 中找到替代方法。我一直在摆弄“密封”和“覆盖”,但我无法得到我正在寻找的行为。

例如,在这段代码中:

using System;

namespace ConsoleApplication1
{
  class Parent
  {
      public void DisplayTitle() { Console.WriteLine("Parent's Title"); }
  }

  class ChildSubclass : Parent
  {
      public void DisplayTitle() { Console.WriteLine("Child's Own Implementation of Title"); 
  }

    static void Main(string[] args)
    {
        ChildSubclass myChild = new ChildSubclass();
        myChild.DisplayTitle();
        Console.ReadLine();
    }
  }
}

我想收到一个编译错误,指出“ChildSubClass”无法覆盖“DisplayTitle”。我目前收到警告 - 但这似乎是我应该能够做的事情,而且我不知道标记该方法的正确属性。


我怎样才能在 C# 中完成这个任务。我相信 Java,我只是将该方法标记为“final”,但我似乎无法在 C# 中找到替代方法。

大致相当于sealed在 C# 中,但您通常只需要它用于虚拟方法 - 并且您的DisplayTitle方法不是虚拟的。

重要的是要注意ChildSubclass isn't压倒性的DisplayTitle - it's hiding它。任何仅使用引用的代码Parent最终不会调用该实现。

请注意,按原样使用代码,您应该会收到编译时警告,建议您添加new方法的修饰符ChildSubclass:

public new void DisplayTitle() { ... }

你不能stop派生类隐藏现有方法,而不是通过密封类本身以完全阻止创建派生类......但不直接使用派生类型的调用者不会关心。

你的是什么real关心这里吗?意外误用,还是故意的问题?

编辑:请注意,示例代码的警告类似于:

Test.cs(12,19): warning CS0108:
        'ConsoleApplication1.ChildSubclass.DisplayTitle()' hides inherited
        member 'ConsoleApplication1.Parent.DisplayTitle()'. Use the new keyword
        if hiding was intended.

我建议您将警告变成错误,然后就很难忽略它们了:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防止 C# 子类覆盖方法 的相关文章

随机推荐

  • CSS 箭头进度条

    我目前正在学习有关 css 的所有内容 因此我尝试生成具有不同功能的不同形状 我目前正在开发一个项目 该项目需要一个水平箭头来显示发生的事务的 进度 所以我试图生成一个箭头 进度条 例如 XX 10 gt the XX s depict a
  • 使用 Enzyme 测试窗口滚动事件处理程序的最佳方法是什么?

    我一直在与一个新团队一起开发 React 应用程序 讨论围绕为触发 window scroll 事件方法的组件编写单元测试进行 那么 我们以这个组件为例 import React Component from react class MyC
  • 来自 HTTP 客户端的 PUT 请求后收到“411 Length required”

    我正在开发一个实现 HTTP 客户端的 Java 程序 我测试它向服务器发送请求 GET POST 和 DELETE 请求工作正常 例如 在 POST 请求之后我得到一个输出 Data extracted status message ok
  • Nodejs 为什么await 只限于异步函数?

    可能重复的wait 仅在 async 函数中有效 我是新来的NodeJS我发现了这个概念async await有点混乱 经过一番阅读和摸索 这是我的理解 假设我有一个函数sum像这样 function sum a b print the n
  • 复制的重复文件(Android Studio 0.4.0)[重复]

    这个问题在这里已经有答案了 在我的项目中 我使用 Apache 的 httpcore 和 httpmime 库 将 Android Studio 更新到 0 4 0 后 我在构建项目时遇到了以下问题 Duplicate files copi
  • 用于更新查找表中向量的某些值的规范 tidyverse 方法

    我经常需要根据查找表重新编码数据框列中的一些 不是全部 值 我对我所知道的解决问题的方法不满意 我希望能够在清晰 稳定 高效方式 在编写自己的函数之前 我想确保我没有复制已经存在的标准 Toy example data data frame
  • Chrome 扩展程序历史记录 API

    我正在编写一个 chrome 扩展 需要分析最近的浏览历史记录对于特定选项卡 The chrome history API允许我搜索全局历史记录中的项目 但似乎没有提供将结果本地化到特定选项卡的方法 我是否错过了什么 或者这是不可能得到的
  • 初始化后向Select2添加选项

    这似乎是一件标准的事情 但我正在努力寻找一个清晰而简单的解决方案 我希望能够向已初始化的 Select2 添加一个或多个附加选项 我正在使用旧版本的 Select2 但不确定该版本是什么 您可以像在标准中解决大多数问题一样解决涉及 Sele
  • Android:保存应用程序单例类中存储的数据的最佳方法

    保存 Android 应用程序的应用程序类 单例 中存储的数据的最佳方法是什么 我有一个安静的大应用程序 可以在活动之间共享大量数据 所以大部分都存储在Application Singleton上 一切都很好 util应用程序被操作系统在内
  • 一直向下滚动到 UITableView 的底部

    I ve a UITableView我试图将 36 行加载到其中 然后一直向下滚动到最后一个单元格 我试过这个 func reloadData chatroomTableView reloadData chatroomTableView s
  • PHP Artisan 使用 MAMP 和 Unix Socket 进行迁移

    我最初是在 Laravel 4 2 中开发我的应用程序 但后来决定将其移动到 5 0 版本 以便它涵盖 5 0 相对 4 2 的更多变化和优势 我正在尝试运行我的迁移 但是收到错误 PDOException SQLSTATE HY000 2
  • SwingWorker 中的错误处理

    我的问题是基于理论的问题 但它确实满足了我的特定需求 当您的 SwingWorker 抛出异常时 您 a 可以预见并且 b 需要恢复并继续 但您想通知用户此错误已经发生 您会怎么做 如何捕获预期的异常并通知用户而不违反 No Swing c
  • Storyboard Xcode 6 中的自适应转场是否已弃用?

    Xcode 6 interface builder by default has new checkbox use size classes It makes views adaptive When I try to make segue
  • Android 偏好设置摘要默认颜色?

    我已经在真正的手机中安装了我的应用程序 即使在模拟器中的所有文本 偏好摘要似乎是相同的颜色 在真正的手机中 颜色是不同的 某种蓝色 但我想这取决于手机的型号 如何将此颜色设置为我的自定义首选项组件 我已经实现了自己的搜索栏 其摘要文本颜色与
  • 在 git 存储库中通过相应 blob 的哈希值查找文件?

    假设我有一个文件可能已经在 git 存储库中 并且它可能驻留在多个路径名下 甚至在同一个提交中 如何查找包含 blob 的所有提交以及与该文件对应的哈希值 并列出这些提交以及每个文件所在的路径名 是否有一种按哈希查找文件的技术也可以搜索索引
  • 在 for 循环中将数据帧附加在一起

    我有一个for loop每次迭代后都会生成一个数据框 我想将所有数据框附加在一起 但发现这很困难 以下是我的 我正在尝试 请建议如何修复它 d NULL for i in 1 7 vector output model lt some pr
  • 有没有一个搜索引擎可以直接给出答案? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我一直想知道这个问题有一段时间了 我不明白为什么谷歌还没有尝试过 或者也许他们已经尝试过 但我只是不知道 有没有一个搜索引擎 您可以在其中输入一个问
  • 如何初始化常量/非常量静态引用成员?

    class Foo private int m i public Foo int i m i i class FooA private const static Foo m foo static Foo m foo2 Q1 gt 如何初始化
  • Azure 应用程序网关 V2 无法使用 NSG 配置

    我已使用 WAF V2 SKU 配置应用程序网关 然后 我将后端池配置为指向 WebApp 并添加 IP 限制以仅允许来自 WAF IP 的流量 然后 我尝试将 NSG 添加到预配的子网 以进一步限制流向前端 IP 地址的流量 我收到错误
  • 防止 C# 子类覆盖方法

    假设我有一个名为 Parent 的抽象父类 它实现了一个名为 DisplayTitle 的方法 我希望这个方法对于继承 Parent 的每个子类都是相同的 如果子类尝试实现自己的 DisplayTitle 方法 我希望出现编译错误 我怎样才