用虚拟方法覆盖抽象方法

2023-11-26

我试图用子类中的虚拟方法覆盖抽象类中的抽象方法。我(假设到目前为止?)了解抽象方法和虚拟方法之间的区别。

显然我无法做到这一点,但我的问题是......为什么?根据已接受的答案here以及以下场景,我只是没有看到问题:

    public abstract class TopLevelParent
    {
        protected abstract void TheAbstractMethod();
    }

    public class FirstLevelChild1 : TopLevelParent
    {
        protected override void TheAbstractMethod()
        {

        }
    }

    public class FirstLevelChild2 : TopLevelParent
    {
        protected virtual override void TheAbstractMethod()
        {
            //Do some stuff here
        }
    }

    public class SecondLevelChild : FirstLevelChild2
    {
        //Don't need to re-implement the method here... my parent does it the way I need.
    }

很明显,我所做的是拥有一个顶级父级和两个继承子级,以及另一个继承其中一个子级的类。再次,根据我上面发布的链接中接受的答案:

“虚拟函数,基本上就是说看,这是功能 这对于儿童班级来说可能足够好,也可能不够好。所以如果是的话 足够好了,使用这个方法,如果没有,那么重写我,并提供 你自己的功能。”

并且第二级子级将从其父级继承虚拟方法,从而满足其最顶层父级抽象方法的实现要求......有什么问题?

我在某个地方遗漏了一些细节,这阻碍了我对此的理解......


An override method is隐式虚拟(从某种意义上说它可以在子类中重写),除非标记为sealed.

Observe:

public class FirstLevelChild1 : TopLevelParent
{
    protected override void TheAbstractMethod() { }
}

public class SecondLevelChild1 : FirstLevelChild1
{
    protected override void TheAbstractMethod() { } // No problem
}

public class FirstLevelChild2 : TopLevelParent
{
    protected sealed override void TheAbstractMethod() { }
}

public class SecondLevelChild : FirstLevelChild2
{
    protected override void TheAbstractMethod() { } 
    // Error: cannot override inherited member 
    // 'FirstLevelChild2.TheAbstractMethod()' because it is sealed
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用虚拟方法覆盖抽象方法 的相关文章

  • 是否有可能劫持标准输出

    我正在尝试使用 C 重定向 Windows XP 上已运行进程的标准输出 我知道如果我自己生成进程 我可以做到这一点 但对于这个应用程序 我更喜欢一个 监听器 我可以附加到另一个进程 这在纯 Net 中可能吗 如果不可能 在 Win32 中
  • .crt 部分?这个警告是什么意思?

    我最近收到此警告 VC 2010 warning LNK4210 CRT section exists there may be unhandled static initializers or terminators 我假设这是关键部分
  • 深拷贝和动态转换 unique_ptr

    假设我有一个如下所示的类 class A virtual A class B public A class C public A 我还有一个 unique ptr 向量 它是这样声明的 std vector
  • NDK 应用 onDestroy 清理 - 如何 DetachCurrentThread

    因此 如果我们连接 我们必须在完成后分离线程 对吗 JNIEnv get jni env JNIEnv res JAVA VM gt GetEnv void res JNI VERSION 1 6 Using cached JavaVM J
  • 无法绑定到“属性 X”,因为它不是“子组件”的已知属性

    在我的项目中 我有一个通用类和一些从该类继承的其他组件 BaseRdnInput ts Injectable export abstract class BaseRdnInput implements ControlValueAccesso
  • 为什么子函数不销毁GtkWindow?

    这是我的代码 void window first void enter window2 GtkWidget w gpointer data void quit GtkWidget w gpointer data void quit int
  • 嵌入资源文件的路径

    我的资源文件中有一个图标 我想引用它 这是需要图标文件路径的代码 IWshRuntimeLibrary IWshShortcut MyShortcut MyShortcut IWshRuntimeLibrary IWshShortcut W
  • ContentDialog 未与 UWP 中心对齐

    据我所知 ContentDialog的默认行为应该是使其在 PC 上居中并在移动设备上与顶部对齐 但就我而言 即使在 PC 上我也将其与顶部对齐 但我不明白发生了什么 我正在使用代码隐藏来创建它 这是我正在使用的代码片段 Creates t
  • 如何减少 MinGW g++ 编译器生成的可执行文件的大小?

    我有一个简单的 Hello world C 程序 在 Win XP 下由 MinGW g 编译器编译为 500kB 可执行文件 有人说这是由于iostream的库和静态链接libstdc dll Using s链接器选项有点帮助 减少了 5
  • 如何自定义 Google 测试失败消息?

    我编写了一个如下所示的 Google 测试 它将一些计算值与 CSV 文件中预期存储的值进行比较 class SampleTest public testing Test public void setupFile const std st
  • .NET 5 EF Core SaveChangesAsync 因错误而挂起

    尽管这个问题有很多结果 但没有一个真正给我明确的答案 每次我尝试通过 AddAsync 和 SaveChangesAsync 方法插入错误数据 例如重复的主键 时 我都会看到以下日志 执行 DbCommand 失败 15 毫秒 我还在 SQ
  • 如何让XmlReader读取C#中的属性?

    我有一个 XML Stream 其中包含以下 XML 内容
  • 如何从外语线程调用Python函数(C++)

    我正在开发一个程序 使用 DirectShow 来抓取音频数据 媒体文件 DirectShow 使用线程将音频数据传递给回调 我的程序中的函数 然后我让该回调函数调用另一个函数 Python 中的函数 我使用 Boost Python 来包
  • 在 C# 中使用命名空间别名有什么好处? [复制]

    这个问题在这里已经有答案了 使用命名空间别名有什么好处 仅仅是为了简化编码吗 仅当与类发生冲突时我才使用名称空间别名 对我来说 这根本没有简化 我的意见是 如果没有必要 就不要使用
  • 从 DataRow 单元格解析 int [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 如何从 DataRow 单元格解析 int 值 Int32 Parse item QuestionId ToString 这段代码可以工作 但看
  • Type.GetInterfaces() 仅适用于声明的接口

    首先 像这样的问题有很多 也许有些OP甚至在问同样的问题 问题是这些问题的答案 无论是否接受 都没有真正回答这个问题 至少我找不到 如何确定类直接声明的接口 而不是由父级或声明的接口继承的接口 e g interface I interfa
  • 选择合适的IDE

    您会推荐使用以下哪种 IDE 语言来在 Windows 下开发涉及识别手势并与操作系统交互的项目 我将使用 OpenCV 库来执行图像处理任务 之后 我将使用 win32 API 或 NET 框架与操作系统交互 具体取决于您建议的工具 性能
  • 连接到没有元数据的网络服务

    我想连接到此网络服务 https training api temando com schema 2009 06 server wsdl https training api temando com schema 2009 06 serve
  • 当我的进程被终止时到底会发生什么?

    我有一个包含本机代码和托管代码的混合进程 在 Windows Server 2003 上运行 当我从进程资源管理器中终止进程时 它会进入 100 cpu 的状态 并在消失之前保持这种状态一段时间 有时甚至 10 分钟 在此期间我无法 杀死
  • 使用 CodeDOM 将程序集添加到 BuildManager 会导致间歇性错误

    我正在使用 CodeDOM 在运行时创建内存中程序集 如下所示 public Assembly Compile CodeCompileUnit targetUnit string path Path GetDirectoryName new

随机推荐

  • 强制一个线程阻止所有其他线程执行

    UPDATE 这个答案指出截至 2013 年 4 月 我想要做的事情是不可能的 然而 这似乎与 Alex Martelli 在Python 食谱 第 624 页 第三版 返回后 PyGILState Ensure 始终保证调用 线程具有对P
  • 如何创建切换按钮?

    我想使用 css 在 html 中创建一个切换按钮 我想要这样 当您单击它时 它会保持推入状态 而当您再次单击它时 它会弹出 如果没有办法 只能使用 css 有没有办法使用 jQuery 来做到这一点 好的语义方法是使用复选框 然后如果选中
  • 如何在 GeckoFX 中设置用户代理?

    在使用 webbrowser 控件一段时间后 我决定尝试一下 gecko 因为我遇到过 webbrowser 的问题 速度慢且性能下降 我下载了最新版本的 geckofx 16 0 0 2 和 xulrunner 16 0 2 并创建了一个
  • 在 iPhone 上从 PNG 图像读取像素颜色值的简单方法?

    有没有一种简单的方法来获取表示图像像素数据的二维数组或类似的东西 我有黑白 PNG 图像 我只想读取某个坐标处的颜色值 例如 颜色值为 20 100 This Category on UIImage might be helpful Sou
  • valgrind 可以在不退出分析应用程序的情况下输出部分报告吗?

    我想使用 valgrind 检查长时间运行的进程是否存在内存泄漏 我怀疑我所追求的内存泄漏可能仅在执行几个小时后才会发生 我可以在 valgrind 下运行应用程序并获取 valgrind 日志 但这样做意味着我必须退出应用程序并重新启动它
  • 无法应用插件“com.google.gms.google-services”

    这是我的项目构建 gradle buildscript dependencies classpath com google gms google services 3 1 0 在模块之一中构建 gradle我有这个 apply plugin
  • 从 WebHttpBinding 访问 WCF 服务中的 Session

    我正在使用 WCF 服务 通过 WebGet 属性 我正在尝试从 WCF 服务访问 Session 但 HttpContext Current 为 null 我添加了 AspNetCompatibilityRequirements 并编辑了
  • 在摩纳哥编辑器的上下文菜单中禁用剪切和复制

    我正在使用摩纳哥编辑器 我看到在以后的版本中 上下文菜单中添加了剪切和复制功能 我想从上下文菜单中删除这两个选项 请让我知道我怎样才能实现它 完整代码 import as actions from monaco editor esm vs
  • jQuery 脚本仅在 ie8/9 开发者工具下工作

    我正在尝试调试无法在 IE 上运行的 jQuery Tools 脚本 可以在这里找到一个例子 http dl dropbox com u 16799097 www demo jQuery Slider index html 它正确加载 第一
  • Xcode 8 中的“Vary for Traits”是什么?

    我正在使用 AutoLayout 和 Size 类 但随着 iOS 10 和新 Xcode 8 0 的发布 出现了一个新选项Vary for Traits 这是针对不同宽度和高度的设备的 Size Class 的替换吗 通过选择width复
  • HTML5 会话存储发送到服务器

    如果我是对的 会话存储存储在客户端 并且只能通过一个选项卡访问 如何将会话存储中存储的信息发送到服务器 我可以使用 cookie 但如果我打开 2 个选项卡 cookie 将被第二个选项卡重写 Thanks 存储对象 localStorag
  • Java:在特定代码块上设置超时?

    是否有可能在某些代码块运行时间超过可接受的时间后强制 Java 抛出异常 这是我所知道的最简单的方法 final Runnable stuffToDo new Thread Override public void run Do stuff
  • grep 带有特殊字符

    我想在以下向量中找到包含星号字符的元素 s lt c A B C D E grep s 1 1 2 3 4 5 这是行不通的 我能理解 因为这是一个特殊的角色 当我阅读时here 我决定在星号之前使用 但这给了我一个错误 grep s Er
  • 我应该将 setup.py 生成的 MANIFEST 文件保留在版本控制下吗?

    当我维护和分发 Python 包时 我应该保留该命令的 MANIFEST 文件吗 python setup py sdist 在版本控制下生成 还是应该将其添加到 gitignore 该文件是根据一些关于源代码分发中包含哪些文件的常用想法生
  • 用于测量代码行数的 Eclipse 插件

    我正在运行 Eclipse Helios 3 6 想知道是否有一个不错的插件可以计算logicaljava 源文件中的代码行 从逻辑上讲 我的意思是 if j gt 6 j 换句话说 将计算 2 行逻辑代码 2 条语句 而不是 3 行物理代
  • Jetpack Compose Navigation 的导航设计是否良好?

    以下代码来自官方示例project 有两个分行 main and end 我找到了代码主要和Code end使用不同的方式进行导航 代码主要简单明了 在其他项目中 它基于状态进行导航 就像代码 A 一样 来自project Code end
  • 如何在 EF Core 中实现 Select For Update

    据我所知 EF 和 EF Core 中没有选项可以显式锁定我正在查询的资源 但我经常需要此功能 并且不想再重新编写每次需要时选择语句 因为我只需要它用于 postgres 和根据规格 FOR UPDATE是查询中的最后一项 我想到的最简单的
  • 无法查看网站上的源图像文件

    http www wordherd co features 在此站点上 当我尝试使用 Firebug 查看任何图标 如 方向 的源图像文件时 它会显示某种内容的 unicode 如何获取源图像文件 我试图了解他们用来防止图像被访问的黑客行为
  • 是否可以从远程 Oracle 数据库读取 CLOB?

    这个答案关于SO的问题说 您可以从远程数据库读取 LONG 但无法读取 CLOB 我在网上没有找到任何相关信息 是真的吗 任何有关此的文档或引用都会有所帮助 答案在特定上下文中是正确的 对于通过数据库链接的简单选择语句 您将收到以下错误 O
  • 用虚拟方法覆盖抽象方法

    我试图用子类中的虚拟方法覆盖抽象类中的抽象方法 我 假设到目前为止 了解抽象方法和虚拟方法之间的区别 显然我无法做到这一点 但我的问题是 为什么 根据已接受的答案here以及以下场景 我只是没有看到问题 public abstract cl