unsafe
进行低级 API 调用、使用指针算法或执行其他一些棘手操作的 C# 代码必须放在以 unsafe 关键字标记的块内。下面的任何代码均可标记为 unsafe:
-
整个方法。
-
大括号中的代码块。
- 单个语句。
unsafe static void PointyMethod() { int i=10; int *p = &i; System.Console.WriteLine("*p = " + *p); System.Console.WriteLine("Address of p = {0:X2}/n", (int)p); }
fixed
在安全代码中,垃圾回收器在对象的生存期内可以自由地移动对象,以组织和压缩可用资源。但是,如果代码使用了指针,则此行为可能很容易造成意外的结果,因此您可以使用 fixed 语句来指示垃圾回收器不要移动某些对象。
class TestFixed { public static void PointyMethod(char[] array) { unsafe { fixed (char *p = array) { for (int i=0; i<array.Length; i++) { System.Console.Write(*(p+i)); } } } }