c# - C# 使用虚拟覆盖
问题描述
在这个例子中,它通过 virtual、override 关键字使用多态
abstract class A
{
public virtual string Print() { return "A"; }
}
class B : A
{
public override string Print() { return "B"; }
}
class C : B
{
public virtual new string Print() { return "C"; }
}
class D : C
{
public override string Print() { return "D"; }
}
class Program
{
static void Main(string[] args)
{
A a = new D();
Console.WriteLine(a.Print());
}
}
控制台打印 B。为什么是 B,而不是 D?谢谢你的回答
解决方案
很简单,因为最后一次覆盖类的Print
函数是在类A
的声明期间B
class B : A
{
public override string Print() { return "B"; }
}
通过声明public virtual new
,您隐藏了Print
. 因此,在D
声明期间,您将覆盖在课堂上声明的新实现C
现在A
,一旦你隐藏了这个功能,你对你做了什么一无所知B
推荐阅读
- python - Python:从列表的字符串元素创建变量/数据框名称
- python - N嵌套for循环python
- python - 如何在另一个窗口上使用 Entry 的输入
- java - Lucidworks 自定义连接器获取最后工作时间
- javascript - 如何在干净的 Nest.js 安装中忽略 React.js 源文件?
- c++ - 推断 operator+ 和其他运算符的(模板化)返回类型
- ruby-on-rails - 如何在哈希数组中搜索哈希键值
- qemu - Qemu 支持 ACPI 2.0+
- go - 无法制作grpc-gateway .gw.pb 也没有错误
- python - 如果在一种情况下后面没有数字,则正则表达式匹配字符串