【发布时间】:2014-11-05 06:41:20
【问题描述】:
我只有一个基本问题:
public class virtualTest
{
public virtual void vTest()
{
Console.WriteLine("Base Class");
}
}
public class derivedVirtualTest : virtualTest
{
public override void vTest()
{
Console.WriteLine("Derived Class");
}
}
这里我使用了函数 vTest() 的函数覆盖
但如果我:
public class virtualTest
{
public void vTest()
{
Console.WriteLine("Base Class");
}
}
public class derivedVirtualTest : virtualTest
{
public void vTest()
{
Console.WriteLine("Derived Class");
}
}
从各个地方删除虚拟和覆盖关键字,然后代码也可以工作。
这怎么可能?
或者如果代码在没有虚拟和覆盖的情况下可以正常工作,那么覆盖和虚拟(整个函数覆盖)有什么用???
编辑:
我通过它调用上述类的方法
static void Main(string[] args)
{
derivedVirtualTest objderivedVirtualTest = new derivedVirtualTest();
objderivedVirtualTest.vTest();
virtualTest objvirtualTest = new virtualTest();
objvirtualTest.vTest();
Console.ReadLine();
}
【问题讨论】:
-
你说这段代码有效,但你从未展示过你是如何测试它的。也发布该代码。这是最重要的部分。
-
@SriramSakthivel 刚刚发布。请看一下
-
参考this 要使用多态性,您需要将编译时类型作为基类型而不是派生类型。只需将
derivedVirtualTest objderivedVirtualTest更改为virtualTest objderivedVirtualTest即可查看差异。