Ever so often, people argue that C# is a purely OO language, just like Java.

But I would like to say that both C# and Java lean towards being OO, and are not entirely so.

For instance, if you take Smalltalk, everything is an object. Messages are objects. All methods are incorporated into objects, and objects communicate with one another using message passing.

I will not buy the argument that OO languages are more productive than Functional Languages - I think both have their own set of benefits. The reason why C# and Java are good is only because they are managed and come with better resource management (and other resources in the form of good libraries).

So, as a C and C++ programmer, I feel the need to ask if MS leaned towards being OO so that they could compare well against Java?

Joe Beda had mentioned that managed code will be the norm, and not otherwise - and I can see the benefits of that, and even agree that it would be the right way to go. But does being managed equate to being OO? I maybe (and hope I'm) wrong, but I have a feeling MS perceives OO as being managed.

But I can see quite a lot of benefits of not going entirely OO, and maintaining functional programming attributes.

I feel that maybe MS should incorporate more functional programming features into C#, while aggresively pushing managed code.

What do you folks think?