这是简单的继承
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继承实现有什么区别。
答案 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