M$ lúc đó có visual C++. Mà C++ thì đã là OOP từ lâu rồi. C# thì xem như là tương đối giống Java, coi như là nó đơn giản hơn so với C++. C# hay Visual Basic dot net đều OOP hết.
C#, Visual Basic, C, C++, Java là ngôn ngữ lập trình. Còn cái nền tảng để chạy phần mềm dựa trên các ngôn ngữ gọi là các bộ thư viện hỗ trợ biên dịch các ngôn ngữ trên thành các lệnh thực thi với hệ điều hành (tạm hiểu vậy đi, lâu quá tôi quên rồi). Gọi là bộ dotnet runtime hay Java Runtime Environment (JRE). Nôm na thì đó là 1 bộ thư viện nằm giữa phần mềm và hệ điều hành, giúp giao tiếp giữa phần mềm và hệ điều hành.
Để hỗ trợ lập trình bằng các ngôn ngữ lập trình kể trên thì có các bộ SDK (dotnet SDK, J2SDK). và từ các SDK này người ta xây dựng các framework để tiện dụng cho việc lập trình (lập trình tức là viết phần mềm đó).
Khác nhau là Java được cung cấp bộ runtime trên cho nhiều nền tảng: Windows, Linux, MacOS, Unix (MacOs cũng là 1 hệ điều hành hệ Unix). Dotnet chỉ dành độc quyền cho Windows (cái này là do chính sách của M$), sau này có mở rộng 1 phần thư viện lập trình web sang các nền tảng khác và có Xamarin chơi cross platform (chủ yếu cũng chỉ dành cho lập trình mobile). Hiện tại Sun Microsystrem (tạo ra Java) được Oracle mua lại và Java vẫn đang được duy trì và phát triển. Nói tóm lại, phần mềm có thể phát triển và chạy ở nhiều hệ điều hành mà hãng phát triển cái bộ thư viện runtime đó muốn hỗ trợ.