一个noobie问题,但嘿嘿。
示例:
BaseClass bc = new ExtendedClass(); //Assume ExtendedClass inherits from BaseClass
((BaseClass)bc).ExtendedMethod();
bc.ExtendedMethod();
((ExtendedClass)bc).ExtendedMethod(); //overridden in ExtendedClass
ExtendedClass ec = new ExtendedClass();
((BaseClass)ec).ExtendedMethod();
ec.ExtendedMethod();
((ExtendedClass)ec).ExtendedMethod(); //overridden in ExtendedClass
bc.ExtendedMethod();
和ec.ExtendedMethod();
在运行时调用哪些实现?他们会不同吗?我假设转换的调用将调用类中的特定实现。
编辑:添加相关标签。
答案 0 :(得分:2)
在这三种情况下,当您创建ExtendedMethod
的实例时,将调用ExtendedClass
的重写实现。毕竟,这就是polymorphism的全部内容。
答案 1 :(得分:2)
public class Base
{
public void Extends()
{
Console.WriteLine("Base class");
}
}
public class Extend : Base
{
public new void Extends()
{
Console.WriteLine("Extend class");
}
}
public class Program
{
public static void Main()
{
Base b = new Base();
b.Extends();
Extend e = new Extend();
e.Extends();
Base be = new Extend();
be.Extends();
Console.Read();
}
}
结果如下:
Base class
Extend class
Base class
请注意,您还可以使用new
类中的Extend
关键字隐藏基本Extends
功能。
public new void Extends()
{
}