• unsafe


      今天无意中发现C#这种完全面向对象的高级语言中也可以用不安全的指针类型,即要用到unsafe关键字。在公共语言运行库 (CLR) 中,不安全代码是指无法验证的代码。C# 中的不安全代码不一定是危险的,只是其安全性无法由 CLR 进行验证的代码。因此,CLR 只对在完全受信任的程序集中的不安全代码执行操作。如果使用不安全代码,由你负责确保你的代码不会引起安全风险或指针错误。unsafe 关键字表示不安全上下文,该上下文是任何涉及指针的操作所必需的。可以在类型或成员的声明中使用 unsafe 修饰符。因此,类型或成员的整个正文范围均被视为不安全上下文,不安全上下文的范围从参数列表扩展到方法的结尾,因此指针在以下参数列表中也可以使用。例如,用 unsafe 修饰符声明的方法:

     unsafe static int Sum(int* p)
            {
                return *p * (*p);
            }

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

    unsafe
                {
                    int a = 5;
                    int* b = &a;
                }

      若要编译不安全代码,必须指定 /unsafe 编译器选项,否则无法通过公共语言运行库验证不安全代码。在 Visual Studio 开发环境中设置此编译器选项

    1. 打开项目的“属性”页。

    2. 单击“生成”属性页。

    3. 选中“允许不安全代码”复选框。

      另外:不安全代码具有下列属性:

    • 方法、类型和可被定义为不安全的代码块。

    • 在某些情况下,通过移除数组界限检查,不安全代码可提高应用程序的性能。

    • 当调用需要指针的本机函数时,需要使用不安全代码。

    • 使用不安全代码将引起安全风险和稳定性风险。

    • 在 C# 中,为了编译不安全代码,必须用 /unsafe 编译应用程序。下面给个完整简单的例子:

    unsafe static int Sum(int* p)
            {
                return *p * (*p);
            }
            unsafe static void Main(string[] args)
            {
                int a = 5;
                Console.WriteLine(Sum(&a));
                Console.ReadKey();
            }
  • 相关阅读:
    Android布局控件
    XAMPP里tomcat启动报错:Make sure you have Java JDK or JRE installed and the required ports are free
    poj 北京大学 2014研究生推免上机考试(校内)
    2014北大计算机学科保研直博夏令营上机poj考试
    《C++Primer》第四版学习笔记--持续更新中
    poj1986:Distance Queries
    poj2533:最长上升子序列
    poj1062:昂贵的聘礼
    黑书贪心例题之钓鱼 poj1042:Gone Fishing
    转:最小没出现的整数
  • 原文地址:https://www.cnblogs.com/czx1/p/5453594.html
Copyright © 2020-2023  润新知