Why are methods in C# final by default versus virtual in Java? Why is the override keyword required to override virtual methods?  How did issues like versioning affect the design of C# and the .NET Framework? 

You can read all about it in Part IV of Bill Venners interview series with Anders Hejlsberg.

Other Reading: