【C#学习】不安全代码

今天第一天写技术随笔,写的不好,望读者海涵。

这两天在学C#中的不安全代码,听到这个名字,首先想到的就是既然不安全为什么还要有这样的功能,为什么还要使用呢?其实,这与我们现实生活中的很多事存在或者处理的道理是一样的,如果对于我们的目标,它是利大于弊的话,那就有选择它的原因。而所谓的不安全代码,并不是指拙劣的代码,而是这类代码的执行不受公共语言运行时(CLR)的完全管理,即非托管的代码,这种代码没有与托管代码相同的控制和约束,由于不受CLR的完全控制,也无法检验该代码以确保其不执行有害的操作,所以叫做“不安全代码”。

在C#中使用不安全代码的主要目的是为了使用指针,因为指针的不安全性,托管代码不支持指针,但是对于一些特定类型的编程工作,使用指针会实现高性能的系统代码。

在C#中,指针的使用和声明与C/C++中是一样的。需要注意的是任何使用指针的代码都必须通过使用unsafe标记为不安全,可以将类型(如类或者结构),成员或单独的代码块标记为不安全。如下面:

 1 using Syetem;
 2 class  Test{
 3 public int num;
 4 public Test(int i)
 5 {
 6 num=i;
 7 }
 8 }
 9
10 class EixedCode{
11 unsafe static void Main()
12 {
13 Test o=new Test(2);14 fixed(int * p=&ol.num){  //使用指针时,通常会使用fixed修饰符,它可以防止垃圾回收器移动托管代码,这里fixed修饰符阻止移动对象o
15 console.WriteLine("vale");
16
17 }
18 }
19 }

指针的内容就不在此继续回顾了,今天就到这,谢谢阅读。

时间: 2024-10-25 18:36:31

【C#学习】不安全代码的相关文章

java学习教程之代码块

学编程吧java学习教程之代码块发布了,欢迎通过xuebiancheng8.com来访问 java中的代码块包括下面几种: 1.普通代码块 2.构造代码块 3.静态代码块 1.普通代码块很简单看下面这个例子: public class Test{ public static void main(String args[]){ { //此处就是普通代码块,普通代码块中的代码按顺序执行 System.out.println("hello"); } } } 2.构造代码块 public cl

iOS: 学习笔记, 用代码驱动自动布局实例

iOS自动布局是设置iOS界面的利器. 本实例展示了如何使用自动布局语言设置水平布局, 垂直布局 1. 创建空白iOS项目 2. 添加一个控制器类, 修改YYAppDelegate.m文件 #import "YYAppDelegate.h" #import "YYViewController.h" @implementation YYAppDelegate - (BOOL)application:(UIApplication *)application didFin

c语言学习之结构篇代码演示样例-输入n个同学的姓名,数学英语成绩,依照平均分从低到高排序并输出

#include<stdio.h> void main(){ const int count = 5;//定义数量 struct student{ char name[80]; float math,eng; float aver; }stu[count],temp; //输入 for (int i = 0; i < count; i++){ scanf("%s%f%f", stu[i].name, &stu[i].math, &stu[i].eng)

iOS: 学习笔记, 用代码驱动自动布局实例(swift)

iOS自动布局是设置iOS界面的利器.本实例展示了如何使用自动布局语言设置水平布局, 垂直布局1. 创建空白iOS项目(swift)2. 添加一个控制器类, 修改YYAppDelegate.swift文件 @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFi

c语言学习之结构篇代码示例-输入n个同学的姓名,数学英语成绩,按照平均分从低到高排序并输出

在虚拟机上测评了下MySQL 和 PostgreSQL 的各种LOAD FILE方式以及时间. 因为是虚拟机上的测评,所以时间只做参考,不要太较真, 看看就好了.MySQL 工具:    1. 自带mysqlimport工具.    2. 命令行 load data infile ...    3. 利用mysql-connector-python Driver来写的脚本. PostgreSQL 工具:    1. pgloader 第三方工具.    2. 命令行 copy ... from

深度学习Matlab工具箱代码详解

最近研究了几天深度学习的Matlab工具箱代码,发现作者给出的源码中注释实在是少得可怜,为了方便大家阅读,特对代码进行了注释,与大家分享. 在阅读Matlab工具箱代码之前,建议大家阅读几篇CNN方面的两篇经典材料,对卷积神经网络Matlab工具箱代码的理解有很大帮助,稍后我会将这两篇文献上传到网上与大家分享.急需的也可以留言注明,我会及时发送至邮箱的. (1)<Notes on Convolutional Neural Networks>,这篇文章是与Matlab工具箱代码配套的文献,不过文

SQLite学习手册(实例代码&lt;一&gt;)

一.获取表的Schema信息:       1). 动态创建表.     2). 根据sqlite3提供的API,获取表字段的信息,如字段数量以及每个字段的类型.     3). 删除该表.     见以下代码及关键性注释:  1 #include <sqlite3.h>  2 #include <string>  3  4 using namespace std;  5  6 void doTest()  7 {  8     sqlite3* conn = NULL;  9  

Tensorflow学习笔记---2--DCGAN代码学习

以mnist数据训练为例,学习DCGAN(deep convolutional generative adversarial networks)的网络结构. 代码下载地址https://github.com/carpedm20/DCGAN-tensorflow 注1:发现代码中以mnist为训练集的网络和以无标签数据集(以下简称unlabeled_dataset)为训练集的网络不同,结构有别.以下笔记主要针对前者(Generator=3个ReLU+1个Sigmoid,Discriminator=

java学习_有趣代码片段(一)

记一个有趣的代码片段 昨天看到一个十分有意思的问题,当时看到问题的我也是瞬间懵了.其实就是自己掌握的知识不扎实.现在我把它分开经行解析下,如有不对,请指正!主要还是自己对基础知识理解的不扎实,以后还会遇到许许多多的问题,就干脆起了个java学习有趣代码片段(一). 第一个问题 代码如下 package com.zhb; public class Test { static Test test = new Test("3"); static{ System.out.println(&qu

iOS学习:iOS代码规范

作者感言 阅读前言 iOS代码规范 Import规范 Define规范 Paragma Mark 规范 Interface规范 implementation规范 实例规范 NSDictionary规范 NSArray规范 函数规范 If-Else规范 For-In For 规范 Block规范 运算符规范 命名规范 实例命名规范 Property命名规范 Interface-class命名规范 Define命名规范 Block命名规范 For-In命名规范 布局框架 文件夹层次结构 MVC架构