2010-01-11 39 views
19

JVM là bắt buộc để chạy một ứng dụng java.JVM tương đương trong C# là gì?

Tôi muốn biết có bất kỳ sự tương đương nào trong C# không?

Nếu có thì nó là gì?

+9

Tại sao bạn lại đánh giá thấp wikipedia, BTW? –

Trả lời

39

Common Language Runtime hoặc CLR. Đây là thời gian chạy hỗ trợ không chỉ C# mà còn các ngôn ngữ .NET khác, chẳng hạn như Visual Basic.NET. Thông thường, mỗi ngôn ngữ cho thấy các nhà phát triển với một tập con của các tính năng có sẵn trên CLR (ví dụ, quá tải phương thức hoàn toàn bằng kiểu trả về thường không được hỗ trợ trong C#, nhưng được CLR hỗ trợ).

Cũng như Java biên dịch sang bytecode, C# và các ngôn ngữ .NET khác biên dịch sang Microsoft Intermediate Language (MSIL) - ngôn ngữ duy nhất để hiển thị bộ tính năng CLR hoàn chỉnh.

Tất nhiên, C# là defined purely as a language. Không có lý do gì khiến nó không thể là được thực hiện để chạy trên các thời gian chạy khác hoặc thực sự ở chế độ diễn giải. Nhưng "tương đương" của "JVM" (ngụ ý cái mặc định) là CLR.

+1

Điều đó không đúng. Bạn không cần CLR để chạy mã C#, * bất kỳ thời gian chạy tương thích CLI nào cũng sẽ thực hiện. Ngoài ra, không phải tất cả các triển khai của C# biên dịch để MSIL, thực sự tôi tin rằng hầu hết các biên dịch để CIL và một số mã nguồn gốc. Trên thực tế, không phải tất cả việc triển khai C# đều được biên dịch * *, tôi tin rằng có ít nhất một thông dịch viên. –

+3

Không, câu trả lời của tôi là đúng, câu trả lời khác thì không. Đây là thời gian chạy mặc định cho C#, vì JVM là dành cho Java. Tôi đã không thực sự nói rằng bạn PHẢI có CLR để chạy mã C# - đó không phải là câu hỏi. –

+0

+1 Nhận xét của bạn, nhân tiện, tất nhiên là hoàn toàn chính xác ngoài việc đó ... –

4

Bạn cần có Common Language Runtime (CLR) để chạy các ứng dụng C#.

+0

Cách này được diễn đạt, điều này không * nghiêm chỉnh * đúng - xem nhận xét của Jörg về câu trả lời của tôi và bản chỉnh sửa của tôi. –

1

Không có .NET tương đương với JVM, vì .NET không chạy bên trong một hộp cát ảo hóa như Java.

Java: Nguồn> Java Bytecode> Được JVM biên dịch cho nền tảng cụ thể.

.NET: Nguồn> MSIL> Biên dịch thành mã gốc trong lần đầu tiên lắp ráp MSIL được thực hiện.

Như vậy, mã .NET có thể được biên dịch thành MSIL, được chuyển đến một kiến ​​trúc máy khác, và miễn là một thứ (như Mono) có thể đọc MSIL và biên dịch thành mã máy, nó sẽ hoạt động. Với Java, mã sẽ luôn chạy sandboxed bên trong JVM.

Java và .NET có kiến ​​trúc tương tự nhau, nhưng chúng cũng rất khác nhau về các liên quan khác. Trong trường hợp này, Java giải quyết sự phụ thuộc nền tảng bằng cách xác định một nền tảng ảo phổ quát duy nhất mà tất cả các mã Java chạy trên, trong khi .NET thay vào đó định nghĩa ngôn ngữ và các thư viện của nó là nền tảng độc lập.

Với Java, những người duy nhất có thể cung cấp một JVM hợp pháp trên một nền tảng cụ thể là Oracle/Sun/Java. Với .NET, bất kỳ ai cũng có thể quyết định triển khai một phiên bản của CLR trong các phần hoặc toàn bộ trên một nền tảng nhất định.

Các vấn đề liên quan