好的,可以说我有两个具有相同方法(样本方法)的类,该类被子对象覆盖: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
}
}