-4

有点菜鸟问题,但嘿嗬。

例子:

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();他们会有所不同吗?我假设强制转换的调用将调用类中的特定实现。

编辑:添加了相关标签。

4

2 回答 2

2

在所有三种情况下,ExtendedMethod都会调用 的重写实现,因为您正在创建ExtendedClass. 毕竟,这就是多态性的全部意义所在。

于 2013-04-05T10:20:01.477 回答
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() 
{

}
于 2013-04-05T10:31:39.513 回答