18.C#基础之不安全代码(在整理当中)

     前面有写到过,核心C#语言没有将指针引入它所支持的数据类型,从而与C和C++有着显著的区别。作为代替,C#提供了各种引用类型,并能创建可由垃圾回收器管理的对象。这就使得C#比C或C++安全的多。

     在核心C#语言中,干脆就不可能有未初始化的变量、"虚"、超过数组边界对其进行索引的表达式,这样C和C++的一系列错误就不会发生在C#中。但尽管如此,但仍有一些场合需要指针类型。例如与底层操作系统进行交互、访问内存映射设备,或实现一些以时间为关键的算法时,没有指针就很难完成,为了应对这种情况,C#提供了编写不安全代码的能力。

     在不安全代码中,可以声明和操作指针,可以在指针和整型间执行转换,还可以获取变量的地址等,从某种意义上说,编写不安全代码就像在C#程序中编写C代码。虽然它的名字时不安全代码,但无论从开发人员还是用户角度,不安全代码事实上都是一种"安全"功能。

     不安全代码必须用修饰符unsafe明确标记。

  18.1不安全上下文

     C#的不安全功能仅用于不安全上下文,不安全上下文是通过在类型或成员的声明中包含一个unsafe修饰符或通过使用不安全代码引入:

       *在类、结构、接口或委托的声明可以包含unsafe修饰符,在这种情况,该类型声明的整个文本范围被认为是不安全上下文;

       *字段、方法、属性、事件、索引器、运算符、实例构造函数、析构函数、静态构造函数的声明包含unsafe,即该成员在整个文本范围是不安全上下文;

       *不安全语句使得可以在块内使用不安全上下文,该语句关联的块的整个文本范围被认为是不安全上下文。

     上面就是在结构声明中指定unsafe,所以可以使用指针类型。还可以这么写:

     这样字段被认为是不安全上下文。unsafe除了建立不安全上下文从而使用指针类型外,对类型和成员没有其他影响。比如:

     A类使用unsafe修饰符,B类继承重写F时,不用重新指定unsafe修饰符。除非B中的F方法本身需要访问不安全功能。但指针是方法签名的一部分时:

  18.2指针类型

     发

猜你喜欢

转载自www.cnblogs.com/dreamoffire/p/10160648.html