Why must virtual techniques be clearly overridden in C#?

By proclaiming a technique as virtual, you're stating your intention the method could be overridden inside a derived class.

By proclaiming your applying method as override, you're stating your intention that you're overriding a virtual method.

By needing the override keyword be employed to override an online method, the designers from the language encourage clearness, by needing you to definitely condition your intentions.

If you do not add the override keyword, the technique is going to be hidden (as though it had the new kwyword), not overridden.

For instance:

class Base 

class Derived : Base 

Base d = new Derived()


This code prints Base. Should you add override towards the Derived implementation, the code prints Derived.

You can't do that in C++ having a virtual method. (There's not a way to cover a C++ virtual method without overriding it)

Since it makes code more readable:

class Derived : Base

In C++, Foo might be considered a virtual method, we can not tell by searching in the definition. In C# we all know a technique is virtual (or is not) because there's whether virtual or override keyword.

Jason's comment below is really a better answer.

(edited for clearness)

For the reason that the C# team people are skilled C++ developers. And understand how incipient this specific bug is:

class Base 

class Derived : public Base lengthy arg) 

It is much more common then you may think. The derived class is definitely declared in another source code file. You do not typically understand this wrong immediately, it takes place whenever you refactor. No peep in the compiler, the code runs pretty normal, just does not do that which you expect it to complete. You can try it to have an hour or perhaps a day and never begin to see the bug.

This could never take place in a C# program. Even handled C++ adopted this syntax, breaking with native C++ syntax deliberately. Always a courageous choice. IntelliSense takes the sting the extra verbiage.

There's lots of syntax tweaks in C# that resemble this type of bug avoidance syntax.

Not every virtual techniques ought to be overridden, though all abstract techniques should (and should) be. For why the 'override' keyword is explicit, like overriding and hiding behave in a different way. A hiding technique is not known as via a mention of the basics class, whereas an overridden technique is. For this reason the compiler particularly alerts about how exactly you need to use the 'new' keyword within the situation where you stand hiding instead of overriding.

There's you don't need to clearly override an online method inside a derived class. Marking a technique virtual only allows overriding.