unsafe 关键字表示不安全上下文,该上下文是任何涉及指针的操作所必需的。

备注:C# 默认编译器是非 unsafe 的,使用 unsafe 关键字会发生编译错误(警告 CS0227:不安全代码只会在使用 /unsafe 编译的情况下出现)。不能通过公共语言运行时验证 unsafe 代码。若要使用 unsafe 关键字,依如下步骤完成:

  1. 选择菜单“项目”中的““项目名”和属性”一项;
  2. 左侧栏找到“生成”→“常规”;
  3. 选中右侧“不安全代码”一栏中的“允许使用“unsafe”关键字编译的代码。”

可在类型或成员的声明中使用 unsafe 修饰符。因此,类型或成员的整个正文范围均被视为不安全上下文。以下面使用 unsafe 修饰符声明的方法为例:

unsafe static void FF快速复制 ( byte [ ] 源 , byte [ ] 目标 , int 数量 )
    {
        // unsafe 上下文:此处可以使用指针
    }

不安全上下文的范围从参数列表扩展到方法的结尾,因此也可在以下参数列表中使用指针:

unsafe static void FF快速复制 ( byte* 源 , byte* 目标 , int 数量 )
    {
        // unsafe 上下文:此处可以使用指针
    }

还可以使用不安全块从而能够使用该块内的不安全代码。 例如:

unsafe
{
    // unsafe 上下文:此处可以使用指针
}

不安全的类

unsafe static void Main(string[] args)
    {
        int z = 5;
        LeiUnsafe . FFUnsafe ( &z ) ;
        Console . WriteLine ( z );
    }

public class LeiUnsafe
    {
        // unsafe 方法:设置指针到整数
        unsafe public static void FFUnsafe ( int* P )
            {
                *P *= *P;
            }
    }

上例输出:25。


兔子码农
4 声望1 粉丝

一个酒晕子