2010-09-26 38 views

Trả lời

3

Khó nói về điều này ở tất cả các thuật ngữ quen thuộc, khả năng này không phải là tất cả được tiếp xúc bằng ngôn ngữ C# hoặc VB.NET. Trình biên dịch C++/CLI sử dụng nó. Cách nó được hiển thị trong disassemblers như Ildasm.exe hoặc Reflector cũng không được tiêu chuẩn hóa.

Có lẽ góc tốt nhất là Reflector, hãy xem qua tại hội nghị System.Data.dll. Nó nằm trong một không gian tên không tên ("-" trong Reflector), nút <Module>. Các .cctor bạn thấy có một initiailizer mô-đun. Cùng một loại động vật như là một constructor lớp tĩnh nhưng ở cấp mô-đun. Nó chạy khi lắp ráp được nạp. C++/CLI sử dụng nó để khởi tạo thư viện runtime C.

Phương pháp ___ CxxCallUnwindDtor() bạn tìm thấy có một ví dụ về "phương pháp toàn cục". Ngôn ngữ C++/CLI không cung cấp bất kỳ cách nào để làm cho các loại hàm này công khai, chúng luôn được nhúng trong siêu dữ liệu với khả năng truy cập nội bộ. Và do đó có thể không được gọi trực tiếp từ chương trình C# hoặc VB.NET. Tôi đã không chơi đủ với ModuleBuilder để biết nếu điều đó có thể được điều sai lầm ở tất cả ngoài những gì C + +/CLI nào. Đây là tất cả rất tối nghĩa và không thực sự hữu ích.

+2

Nhìn vào System.Data đã khai sáng cho tôi. Có một số phương pháp được định nghĩa là công khai, nhưng không có cách nào tôi có thể tìm thấy để truy cập chúng từ C#. – configurator

0

Phương pháp toàn cầu có nghĩa là phương pháp có thể được gọi mà không đủ điều kiện tên của nó tức là

Phương thức (Param) thay vì Module.Method (Param).

Trong vb, phương thức công khai trong mô-đun là toàn cục.

Trong C# phương thức tĩnh công khai trong lớp tĩnh là toàn cục.

+1

Trước hết, trong C# (và tôi nghĩ rằng VB quá) bạn không thể gọi phương thức tĩnh công cộng từ các lớp khác mà không đủ điều kiện chúng với tên lớp. Thứ hai và quan trọng hơn là DefineGlobalMethod được gọi trên trình xây dựng module (không phải là một mô-đun VB là một lớp tĩnh), không phải trên một trình xây dựng lớp - vì vậy phương thức sẽ không nằm trong một lớp. – configurator

+0

Bạn hoàn toàn có thể gọi các phương thức mô-đun trong VB mà không cần phải gọi tên lớp. Tôi nghĩ rằng đây là trường hợp trong C#, nhưng dường như một lớp tĩnh trong C# được xử lý khác với một mô-đun trong VB. – Tomasi

+0

Tôi đứng sửa trên mặt trước VB. Bạn có chắc chắn đây là những gì 'DefineGlobalMethod' không? Vì các phương thức vẫn thuộc về một mô đun VB, và 'DefineGlobalMethod' là trực tiếp trên DLL. – configurator

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