好的,可以说我有两个具有相同方法(样本方法)的类,该类被子对象覆盖:ObjectParent和ObjectChild

ObjectChild ExampleVariable = new ObjectChild();
(ExampleVariable as ObjectParent).sampleMethod();


这将从ObjectChild或ObjectParent调用sampleMethod吗?

我认为它将从ObjectChild调用sampleMethod,但是我想确保在基于该假设放弃一堆代码之前。

最佳答案

这将从ObjectChild或ObjectParent调用sampleMethod吗?


假设它实际上是一个正确重写(而不是被隐藏)的虚拟方法,它将调用ObjectChild实现。这就是虚拟方法的重点-您无需在编译时就知道执行时的类型。例如,我可以使用Stream.Read编写方法(例如,以Stream作为参数),而无需知道最终会使用哪种Stream实现。在执行时,该代码最终可能会从网络,内存,磁盘读取...我的方法的代码既不知道也不区分大小写。

简短而完整的程序说明了这一点:

using System;

class ObjectParent
{
    public virtual void Foo()
    {
        Console.WriteLine("ObjectParent.Foo");
    }
}

class ObjectChild : ObjectParent
{
    public override void Foo()
    {
        Console.WriteLine("ObjectChild.Foo");
    }
}

class Test
{
    static void Main()
    {
        // Simpler code to demonstrate the point
        ObjectParent parent = new ObjectChild();
        parent.Foo(); // Prints ObjectChild.Foo
    }
}

09-26 11:17