2016-02-25 23 views
5

Tôi đang sử dụng Mono.Cecil để đọc một assembly được tạo bởi Regex.CompileToAssembly(). Khi tôi lặp qua các loại, có một loại trong không gian tên gốc có tên là <Module>. Loại không có loại cơ sở. Loại này là gì? Đây có phải là một số tạo phẩm Mono.Cecil hay cái gì đó thực sự là một phần thực sự của hội đồng .NET không? Nó đóng vai trò gì?Loại "<Module>" là gì?

Trả lời

7

Các <Module> loại là một nơi chủ các tờ khai mà không phù hợp với mô hình CLI. Thông thường chỉ có liên quan trong các assembly là chế độ hỗn hợp, chứa cả hai mã được viết bằng ngôn ngữ được quản lý cũng như một mã không được quản lý như C hoặc C++. Nó trống cho các hội đồng quản lý thuần túy.

Những ngôn ngữ hỗ trợ chức năng miễn phí và biến toàn cục. CLR không trực tiếp hỗ trợ điều đó, các phương thức và biến phải luôn là thành viên của một loại. Vì vậy, trình tạo siêu dữ liệu sử dụng một mẹo đơn giản, nó tạo ra một loại giả để trở thành ngôi nhà của các hàm và biến đó. Tên của loại giả mạo đó là <Module>. Nó luôn có nội bộ khả năng truy cập để ẩn các thành viên. Chỉ có bao giờ là một trong những loại hình, RID của nó luôn luôn là 1.

Mã nguồn CLR gọi nó là "Global Class".