下面的继承有什么不同

本文关键字:什么 继承 | 更新日期: 2023-09-27 18:17:45

下面是简单的继承

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中提取

下面的继承有什么不同

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

BaseClass b = new ChildClass ();
b.Draw () // will call ChildClass.Draw 

文档

  • msdn - 10.5.3虚方法
  • c#工作站教程-第9课:多态性

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

在第一个实现中,如果你从BaseClass内部调用Draw(),输出将是"从基类绘制"。但在第二个实现中,它将是"从Child Class中绘制"。这里有一个解释:http://weblogs.sqlteam.com/mladenp/archive/2007/04/09/60168.aspx