在C#中转换类

rgx*_*x71 3 c# casting

我有一个问题,为什么在这段代码中,One()方法是从B类执行而Two()方法是从A类执行的?我知道那是在做铸造,但我不明白这种方式是有效的.顺便说一句,任何有这种技巧的好链接或书籍都将非常感激.比你.

class Program
{
    static void Main(string[] args)
    {
        B b = new B();
        A a = (A)b;

        a.One(); 
        a.Two(); 
    }
}

public class A
{
    public virtual void One()
    {
        Console.WriteLine("A One");
    }
    public void Two()
    {
        Console.WriteLine("A Two");
    }
}

public class B : A
{
    public override void One()
    {
        Console.WriteLine("B One");
    }
    public new void Two()
    {
        Console.WriteLine("B Two");
    }
}
Run Code Online (Sandbox Code Playgroud)

Jim*_*elo 5

这是因为Two()它不是虚方法.如果你专门看一个实例,那么Two()从类调用的唯一时间B就是B.A调用时类没有虚拟方法的查找表,Two()因此没有人知道在别处查找其他方法.

您可以在我对此问题的回答中查看更多详细信息.

  • 关于"虚拟"方法和查找类结构的非常好的澄清以获得解决方案 (2认同)