Pretty new guy here, starting to look deeper onto C#.
I was wondering if you can "update" an inherited method. Here in my example the "Mage" class inherits from "Hero". Both have a "Shout" method, yet the Mage shout should add a line of text to the screen, but I only get the Hero's one.
I don't want to override Hero's Shout, but "update it" so Hero's childrens can shout something else. I was expecting new to let me modify the old methods while still using it, but no luck. What am I missing?
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!");
}
}
Tanks for any help, tip,...!
Main could be:
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();
}
}
Expected output should be :
I am Paul One-Eye and I am a hero!
I am Zangdar the Just and I am a hero!
Also, I am a fierce Mage!
EDIT: Overriding the method like this DOES change SOMETHING:
public override void Shout()
{
base.Shout();
Console.WriteLine("I am a fierce Mage!");
}