Hejlsberg: Originally we had planned not to support Edit and Continue, because we weren't sure that we could find the time to do the work in the IDE. But sort of halfway through the development phase of Whidbey we realized that there was actually enough time on the schedule to do the work, so we added Edit and Continue as a feature, also based on a lot of user feedback. VB6 has Edit and Continue and in the first releases of VB.Net it was not supported. So in 1.0 and 1.1, the 2002 and 2003 releases did not have Edit and Continue and a lot of VB users were really missing it. But it's not really a VB feature as such, it is a program or productivity feature. And since a lot of the work to support Edit and Continue actually goes into the .Net platform, we're sort of positioned to take advantage of all of that if we just do a bit of work that we needed to do in the IDE itself.
InfoWorld: Besides the Edit and Continue feature, what is the main benefit for Visual C# users in Visual Studio 2005?
Hejlsberg: If we look at the IDE itself, Edit and Continue is one of the big ones. The other big one, I would say there, is code refactoring. [It's] sort of the ability for the IDE to do a lot of the tedious edits to your code that you [would] end up doing as a programmer yourself. Let's say you have a method and you want to add an extra parameter to it. First [you would have] to find a method [of] adding an extra parameter, then find all the places where the method is called and add an extra default value onto every call there. But with the refactoring, the IDE can do all of that for you, and it can do it much better always, because these edits tend to be very mechanical that you do to your code. All of the refactorings, like change the name of a method, add an extra parameter, it's the same work you do over and over, and machines tend to be much better at the mechanical stuff and we're better at the creative stuff. So in effect we do more of the mechanical work in the IDE, leaving you more time to think about the code and the algorithms and the part of the equation that the human is good at. So that's sort of, from the IDE side, one of the other big ones. In the language, I think by far, the biggest feature is generics, which in a nutshell is the ability to parameterize your types. When you write code, clearly code is much more useful when you can have parameters on your methods and your functions. And the same is effectively true for types. Types can be much more useful if you can parameterize them. I don't know if you want me to go to the next level of detail and give you sort of a look into what generics does.
InfoWorld: A couple of sentences, maybe.
Hejlsberg: Before generics you couldn't write, for example, a container class. Let's say I want to write "My Smart List," you know, that's going to be able to store objects using a binary tree or whatever, or it's got a model, a table and a database. But I don't actually know what the table is going to be a table of. But I do know that I want it to have an Add method and a Delete method that adds a row or deletes a row and so forth. With generics, I can actually write code for a table of some type and I can say, call that Type T. And then later I can give T, say table, a customer table and they will all share the code and the compiler. The type system will do all the type-checking for you. So you can parameterize your types effectively.
InfoWorld: What is the importance of the C-Omega project at Microsoft?