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: