c# - 为什么我的转换/转换失败?

标签 c# inheritance casting type-conversion

程序代码 - 2 个类,B 继承自 A,TypeH() 发布类字母:

class Program
{
    static void Main(string[] args)
    {
        A z = new A();
        A x = new B();
        B y = (B)x;

        z.TypeH();
        x.TypeH();
        y.TypeH();

        x = (A)y;
        x.TypeH();
    }
}
class A
{
    public virtual void TypeH()
    {
        Console.WriteLine("A");
    }
}
class B : A
{
    public override void TypeH()
    {
        Console.WriteLine("B");
    }
}    

输出:A B B B 为什么最后的输出是B而不是A?

最佳答案

这称为多态性。实例很重要(B),而不是类型引用(A)。

关于c# - 为什么我的转换/转换失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10411695/

相关文章:

c# - 按键排序字典然后将所有值添加到列表

c# - 将当前对象类型传递给基本构造函数调用

c# - 从通用基类继承,应用约束,并在 C# 中实现接口(interface)

javascript - 如何使用 && 正确检查两个条件

c++ - 当 A 和 B 没有共同的祖先时,通过 dynamic_cast 从 A* 转换为 B* 是否有效?

c++ - C/C++ 中的显式转换

c# - SQL Server 使用 datetime2 查询今天的日期

c# - JWT 无法将 header 解码为 Base64Url 编码字符串

c# - 从顺序文件读取到结构数组

c# - 抽象工厂模式