Tôi sẽ không đi sâu vào chi tiết ở đây, bởi vì những người khác đã bao quát rất nhiều, nhưng tôi muốn làm rõ một số điểm mà các câu trả lời khác chưa thực sự giải thích rõ ràng hoặc chính xác. Điều này phần lớn là giả tạo, và với 99.99999% các trường hợp bạn có thể chỉ nghĩ về "C# và CIL/MSIL là mã được quản lý", nhưng có một số sự tinh tế cho điều này.
Đầu tiên, CIL/MSIL được gọi là "ngôn ngữ trung gian", có nghĩa là ngôn ngữ máy tính được sử dụng làm bước trung gian giữa mã nguồn và mã máy gốc cuối cùng. Tuy nhiên, điều này không nhất thiết phải là trường hợp. Tôi đã nghe nói về các dự án thử nghiệm, nơi họ đã tạo ra một CPU thực hiện CIL (hoặc java tương đương được gọi là Java Byte Code) trực tiếp mà không cần chuyển đổi nó thành một dạng nguyên bản (về cơ bản, CIL là biểu mẫu gốc).
Mã được quản lý đề cập đến mã được "quản lý" theo thời gian chạy được quản lý của một số loại. Điều này thường có nghĩa là mã được thu thập rác và có một số loại lớp bảo mật ngăn chặn những thứ như tràn bộ đệm và các loại sự cố khác có thể xảy ra trong mã gốc. Trong .net này được gọi là Ngôn ngữ chung Thời gian chạy (CLR)
Trong những ngày cũ, điều này thường được gọi là "máy ảo" và tại sao môi trường java được gọi là JVM, mặc dù thuật ngữ đó hiện nay phần lớn một sự nhầm lẫn. Ngày nay, với các trình biên dịch JIT (chỉ trong thời gian), không có "máy ảo" thực sự, nhưng nó thay vào đó là một lớp mã "kết thúc" mã được biên dịch gốc để đảm bảo bạn không phá vỡ các quy tắc và làm sạch sau ma cua ban. Nó cũng tóm tắt một số điều nền tảng cụ thể để CIL không phải lo lắng về chúng.
Vì vậy, mã được quản lý đề cập đến khái niệm mã đang chạy trong thời gian chạy được quản lý. CIL được coi là mã được quản lý khi nó đang chạy trong một thời gian chạy như môi trường chạy .NET.
C# và VB.NET thường được coi là "Ngôn ngữ được quản lý" vì chúng thường được biên dịch thành CIL và chạy trong thời gian chạy được quản lý. Tuy nhiên, điều này không nhất thiết phải là trường hợp (mặc dù nếu tuân theo thư của đặc điểm kỹ thuật, nó có thể không phải là trường hợp). Ví dụ, có các trình biên dịch sẽ biên dịch C# trực tiếp sang mã gốc mà không có trình độ trung gian, và có các trình thông dịch thời gian chạy cho C# mà không biên dịch mã, mà đúng hơn là "diễn giải" nó khi chạy.
Vì vậy, ý chính là Mã được quản lý và CIL là hai thứ khác nhau, nhưng chúng có liên quan.
Và được chính thức gọi là CIL, Ngôn ngữ trung gian chung, theo [ECMA] (http://www.ecma-international.org/publications/standards/Ecma-335.htm) – Bob
NGEN thường ** không ** được sử dụng khi biên dịch thành mã gốc, trình biên dịch JIT được sử dụng thay thế. Và “[mã byte] (http://en.wikipedia.org/wiki/Bytecode)” là ** không ** tên khác cho mã gốc, đó là một tên khác cho mã được quản lý. – svick
Thật vậy, đã đề cập đến JIT ngay bây giờ và quyết định sử dụng 'bản địa' để tránh nhầm lẫn. –