Well, so far as I understand it, all of the "managed" languages in .NET (i.e. everything except the "unmanaged" C++, IIRC) are compiled into an intermediary language and thrown into an interpreter (or compiled natively - I can't remember which - it might even be both depending on configuration). The "managed" stuff uses garbage collection, just like Java.
That means that because C#, Managed C++, VB, ASP can all be expressed as the intermediary language, they can all fit together easily; I can write one object in C++, one in VB, one in ASP, and use one from the other with the objects' defined interfaces
without even knowing what language they were written in. Unmanaged C++ can be wrapped and used, as a COM+ object, if memory serves.
It should mean that we (talking about my day job here) can create the back end as either managed or unmanaged C++ (it'll depend on how desperate we are for speed and how well the managed stuff performs), knock up a front-end in VB and link the two together almost seamlessly.
I'll tell you if it works out to be as easy as that in a few months

I've only been playing with .NET fro a week or so, but I quite like it already (though I've been doing VB, and the "managed C++" is a bit of a culture shock from vanilla C++ I hear).
Cheers,
Ref.