基类扩展对象实现

时间:2013-04-05 10:15:31

标签: c# inheritance casting polymorphism base-class

一个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();在运行时调用哪些实现?他们会不同吗?我假设转换的调用将调用类中的特定实现。

编辑:添加相关标签。

2 个答案:

答案 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() 
{

}