Contrary to the JVM, the CLR was designed to support any strong typed memory language. The DLR came afterwards to fix the holes making dynamic ones run well.
So the CLR bytecode does support more features than each MS language exposes.
Another fact is that CLR was going to be based on COM, not bytecode but eventually with Java picking up steam, they went with the CLR design instead.
The new WinRT model is the return to the original idea to use COM and everything native.
You don't really need imaginary destructors in C#, using, structs and closure FOP patterns already help a lot. C# 7 will make it even better.
https://msdn.microsoft.com/en-us/library/68td296t.aspx
https://msdn.microsoft.com/en-us/library/ms379617%28v=vs.80%...
Contrary to the JVM, the CLR was designed to support any strong typed memory language. The DLR came afterwards to fix the holes making dynamic ones run well.
So the CLR bytecode does support more features than each MS language exposes.
Another fact is that CLR was going to be based on COM, not bytecode but eventually with Java picking up steam, they went with the CLR design instead.
The new WinRT model is the return to the original idea to use COM and everything native.
You don't really need imaginary destructors in C#, using, structs and closure FOP patterns already help a lot. C# 7 will make it even better.