这里很新人,开始深入了解C#.
我想知道你是否可以"更新"一个继承的方法.在我的例子中,"Mage"类继承自"Hero".两者都有一个"Shout"方法,但Mage的喊叫应该在屏幕上添加一行文字,但我只得到Hero的一个.
我不想覆盖Hero的Shout,但是"更新它",所以Hero的孩子们可以喊出别的东西.我期待新的让我在使用它的同时修改旧方法,但没有运气.我错过了什么?
public class Hero
{
protected string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public Hero(string n)
{
Name = n;
}
public virtual void Shout()
{
Console.WriteLine("I am {0} and I am a hero! ", Name);
}
}
public class Mage : Hero
{
public Mage(string n) : base(n)
{
Name = n;
}
public new void Shout()
{
base.Shout();
// Next line does not print...
Console.WriteLine("Also, I am a fierce Mage!");
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助坦克,小费,......!
主要可能是:
class Program
{
static void Main(string[] args)
{
var h = new Hero("Paul One-Eye");
// Old line, not working
// var m = new Hero("Zangdar the Just");
var m = new Mage("Zangdar the Just");
h.Shout();
m.Shout();
}
}
Run Code Online (Sandbox Code Playgroud)
预期产量应为:
我是Paul One-Eye,我是英雄!
我是Zangdar Just,我是英雄!
另外,我是一个凶悍的法师!
编辑:覆盖像这样的方法改变SOMETHING:
public override void Shout()
{
base.Shout();
Console.WriteLine("I am a fierce Mage!");
}
Run Code Online (Sandbox Code Playgroud)
你的代码工作正常但你用Base Hero类初始化你的Mage
你做到了
var h = new Hero("Paul One-Eye");
var m = new Hero("Zangdar the Just");
Run Code Online (Sandbox Code Playgroud)
它应该是
var h = new Hero("Paul One-Eye");
var m = new Mage("Zangdar the Just");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |