Có sự khác biệt giữa các con trỏ không được quản lý và không được quản lý.
Con trỏ được quản lý là một điều khiển cho đối tượng trên vùng được quản lý và AFAIK chỉ khả dụng trong C++ được quản lý. Nó tương đương với C# tham chiếu cho một đối tượng. Con trỏ không được quản lý, mặt khác, tương đương với một con trỏ kiểu C truyền thống, tức là địa chỉ của một vị trí bộ nhớ; C# cung cấp toán tử &
đơn nhất, fixed
từ khóa và unsafe
ngữ cảnh cho điều đó.
Bạn đang cố gắng đưa con trỏ đến trường được quản lý (dynamic
thực sự là System.Object
là ngụy trang), trong khi C# chỉ cho phép trỏ tới đối tượng không được quản lý, do đó từ ngữ: loại của bạn không được quản lý.
Thêm một chút về điều này here.
Cập nhật: để làm cho nó rõ ràng hơn, được quản lý C++ hỗ trợ cổ điển C-style con trỏ và tài liệu tham khảo. Nhưng để giữ cho thuật ngữ C++ nhất quán, chúng được gọi là không được quản lý và được quản lýcon trỏ, tương ứng. C# cũng hỗ trợ con trỏ (rõ ràng trong ngữ cảnh unsafe
) và tham chiếu (ngầm định bất cứ khi nào các đối tượng tham chiếu), nhưng sau này là không phải là gọi là "con trỏ được quản lý", chúng chỉ là tham chiếu.
Tóm lại: trong C++ có các con trỏ không được quản lý và được quản lý, trong C# - các tham chiếu và tham chiếu không được quản lý.
Hy vọng điều đó có ý nghĩa ngay bây giờ.
Nguồn
2012-03-30 12:35:01
Rõ ràng loại không được quản lý là loại không phải không được quản lý. Mmmm. –
Đừng đọc quá nhiều vào một thông báo lỗi vụng về. C# binder đơn giản không hỗ trợ con trỏ. –
Không có sự khác biệt. Từ ngữ chỉ đơn giản là do hành vi mong đợi. "Con trỏ là loại không được quản lý. Đây không phải là một trong số đó. Đây là loại không được quản lý." Lỗi không phải là các trường được quản lý, đó là các trường là * không được quản lý *, mặc dù hai cụm từ này có cùng ý nghĩa. –