Unsafe Code
Giới thiệu về Unsafe Code
C# cho phép sử dụng các biến con trỏ trong một chức năng của khối mã khi nó được đánh dấu bởi các sửa đổi không an toàn. Mã không an toàn hoặc mã không được quản lý là một khối mã sử dụng một con trỏ biến.
Lưu ý: Để thực hiện các chương trình được đề cập trong chương này ở phần mã hóa, xin vui lòng thiết lập tùy chọn biên dịch trong Project >> Compile Options >> Compilation Command to
mcs * .cs -out: main.exe -unsafe "
Con trỏ - Pointer
Con trỏ là một biến có giá trị là địa chỉ của một biến khác, tức là địa chỉ trực tiếp của vị trí bộ nhớ. tương tự như bất kỳ biến hoặc không đổi nào, bạn phải khai báo một con trỏ trước khi bạn có thể sử dụng nó để lưu trữ bất kỳ địa chỉ biến nào.
Cú pháp:
type *var-name;
Ví dụ:
int *ip; // pointer to an integer double *dp; // pointer to a double float *fp; // pointer to a float char *ch // pointer to a character
Ví dụ UnsafeCodeDemo sau đây sẽ minh hoạ việc sử dụng các con trỏ trong C# (sử dụng tuỳ chọn unsafe khi chạy ví dụ):
Thay vì khai báo toàn bộ phương thức là không an toàn, bạn cũng có thể tuyên bố một phần của mã là unsafe code. Ví dụ trong phần sau đây cho thấy điều này.
Nhận giá trị bằng cách sử dụng con trỏ
Bạn có thể lấy dữ liệu được lưu trữ tại vị trí được tham chiếu bởi biến con trỏ, sử dụng phương thức ToString()
. Ví dụ UnsafeCodeDemo2 sau đây sẽ minh họa cụ thể điều này:
Truyền con trỏ như tham số của phương thức
Bạn có thể truyền một biến con trỏ tới một phương thức như là tham số. Ví dụ UnsafeCodeDemo3 sau đây sẽ minh họa cụ thể điều này:
Truy xuất các phần tử của mảng thông qua con trỏ
Trong C #, một tên mảng và một con trỏ tới một kiểu dữ liệu giống như dữ liệu mảng, không phải là cùng loại biến. Ví dụ, int * p và int [] p, không phải là loại tương tự. Bạn có thể tăng biến con trỏ vì nó không phải là cố định trong bộ nhớ, nhưng một địa chỉ mảng được cố định trong bộ nhớ, và bạn không thể tăng được. Ví dụ UnsafeCodeDemo4 sau đây sẽ minh hoạ cụ thể điều này:
Dịch mẫ lệnh không an toàn
Để biên dịch mã không an toàn, bạn phải chỉ định / không an toàn chuyển đổi dòng lệnh với trình biên dịch dòng lệnh.
Ví dụ, để biên dịch một chương trình có tên Program.cs chứa mã không an toàn, từ dòng lệnh, đưa ra lệnh:
csc /unsafe Program.cs
Nếu bạn đang sử dụng Visual Studio IDE thì bạn cần cho phép sử dụng mã không an toàn trong thuộc tính của dự án.
Để làm điều này:
Mở thuộc tính của dự án bằng cách nhấp đúp vào nút thuộc tính trong Solution Explorer.
- Nhấp vào tab Xây dựng
- Chọn tùy chọn "Cho phép mã không an toàn"