以下继承之间的区别是什么

时间:2011-12-14 15:00:24

标签: c# inheritance virtual-functions

这是简单的继承

public class BaseClass
{
    public string Draw()
    {
        return "Draw from BaseClass";
    }
}

public class ChildClass:BaseClass
{
    public string Draw()
    {
        return "Draw from ChildClass";
    }
}

static void Main(string[] args)
{
   ChildClass c = new ChildClass();
   console.writeline(c.Draw());
}

上面的实现将打印出来 从Childclass中抽取

以下是覆盖

的用法
public class BaseClass
{
    public virtual string Draw()
    {
        return "Draw from BaseClass";
    }
}

public class ChildClass:BaseClass
{
    public override string Draw()
    {
        return "Draw from ChildClass";
    }
}

static void Main(string[] args)
{
   ChildClass c = new ChildClass();
   console.writeline(c.Draw());
}

上面的实现将打印出来 从Childclass中抽取

那么上面的2继承实现有什么区别。

2 个答案:

答案 0 :(得分:3)

在第二个片段中,Draw被声明为虚拟,这意味着您可以从类型BaseClass的变量中调用继承的方法。

BaseClass b = new ChildClass ();

b.Draw () // will call ChildClass.Draw 

<强>文档

有趣的事情......上面列表中的第二个链接使用了与您提供的相同的片段。

答案 1 :(得分:0)

在第一个实现中,如果从Draw()内部调用BaseClass,则输出将为“从基类绘制”。但在第二个实施中,它将是“从儿童班中吸取”。这是一个解释: http://weblogs.sqlteam.com/mladenp/archive/2007/04/09/60168.aspx