C#覆盖关键字

标签 c# virtual-functions

我想知道如果我不在派生类方法m1()中的方法之前放置override关键字,那么这之前的默认值是多少,还是会抛出编译时错误?

class A { virtual void m1(){} }
class B: A { void m1(){} }

最佳答案

首先,你会得到一个编译时错误,因为 virtual 成员不能是私有(private)的,A.m1 是这样写的。

其次,修复此问题后,您将收到一个编译时警告,提示 B.m1 隐藏了继承的成员 A.m1

第三,如果你这样做:

A a = new B();
a.m1();

这将调用 A.m1 而如果您将 override 插入到 B.m1 的定义中,则上面的代码将调用 B.m1。然而,如果你将 new 插入到 B.m1 的定义中,那么上面的代码仍然会调用 A.m1 但它会省略编译 -时间预警。

关于C#覆盖关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4045739/

相关文章:

c# - Twitter api V1.1 - 尝试获取 user_timeline 时获取 "(401) Unauthorized"

c++ - 基类中的虚函数

c++ - 虚拟和非虚拟继承的混合

使用将在派生构造函数中构造的参数调用的 C++ 基本构造函数

c# - 如何正确清理 Excel 互操作对象?

c# - 如何在 MySqlCommand 中包含 "declare"语法

c# - 模拟 Controller 上下文和 UrlHelper

c++ - 数据类型 inst 转换正确吗?

c++ - 派生纯虚函数的实现

c# - 使用 JSON 和 JQuery 将数组发布到 C# Web Api 后端