IMHO, the big things that VB.net and C# need are:
- a "using" declaration for fields, which would cause the compiler to generate code to dispose of all fields thus tagged. The default behavior should be for the compiler to make a class implement IDisposable if it does not, or insert disposal logic before the start of the main disposal routine for any of a number of common IDisposal implementation patterns, or else use an attribute to specify that the disposal stuff should go in a routine with a particular name.
- a means of deterministically disposing of objects whose constructors and/or field initializers throw an exception, either by a default behavior (calling the default disposal method) or a custom behavior (calling a method with a particular name).
- For vb.net, an auto-generated method to null out all WithEvent fields.
All of those can be kludged pretty well in vb.net, and somewhat less well in C#, but first-class support for them would improve both languages.