3 ms·
> Only methods explicity declared as virtual can be overriden You can with "new", no? public class Foo { public void Say() { Console.WriteLine
by smcl 4y ago
> Only methods explicity declared as virtual can be overriden
You can with "new", no?
public class Foo
{
public void Say() { Console.WriteLine("Foo!"); }
public void Think() { Console.WriteLine("I;m thinkin about thos beans");
}
public class Bar : Foo
{
new public void Say() { Console.WriteLine("Actually, Bar!"); }
}
So with Bar we have inherited Think(), but have overridden Say(). Ok technically the MSDN docs will say that we've "hidden" the inherited method Say(), but the effect here is that we've overridden something not marked "virtual"
edit: Oops yeah I'm talking rubbish, see replies for more info :D
- fabian2k 4y agoUsing new is still very different from using override, there are real differences in behaviour there. Though I never used "new", it's usually described as a really bad idea unless you know what you're doing, I never saw the need to use this.
- bartwe 4y agoIsn't that shadowing instead of inheritance ?
- A321321 4y agoNo, that’s not how new works. Any method in the base class will still call the “hidden” method. https://dotnetfiddle.net/zcVPof https://dotnetfiddle.net/zcVPof
- smcl 4y agoAh yeah you're right :)