CS5L14——unsafe
CS5L14——unsafe
unsafe
Unity移动开发内涉及内容,这里将其补充到C#知识补充内,它本身不属于C#知识补充的课程
默认情况下,C#是不支持 指针 的,unsafe
关键词用于在C#表示不安全的上下文,
如果想要在C#中进行任何和指针相关的操作,就必须配合 unsafe
关键词使用。
何为指针
指针(Pointer,简称
ptr
)是计算机编程中一个重要的概念,它是一种特殊的数据类型,用于存储变量的内存地址。
简单来说,指针指向了一个变量在计算机内存中的存储位置。指针就是地址,地址就是指针每个变量在内存中都有一个地址,在编程中,通过定义指针变量,我们可以存储一个变量的地址,
这就使得我们可以通过间接的方式操作和修改变量,而不需要访问原始的变量名。
在公共语言运行时(CLR)中,不安全代码是指无法验证的代码。
C# 中的不安全代码不一定是危险的,只是 CLR 无法验证该代码的安全性。
因此,CLR 将仅执行完全信任的程序集中的不安全代码。
如果你使用不安全代码,你应该负责确保代码不会引发安全风险或指针错误
关于CLR是什么,详情请见:CS5L1——.NET相关知识
注意:unsafe
的使用虽然能让我们在C#中使用指针,但是会存在安全风险和稳定性风险,如果没有特殊需求,请尽量避免在C#中使用 unsafe
unsafe的基本使用
如果想要在Unity中正常使用C#中的unsafe
关键词进行程序编写,
我们必须在Unity的 Player Settings 中的 Other Settings 中将 Allow ‘unsafe’ Code 选项勾选上
勾选该选项后,我们就可以在Unity中使用unsafe
关键词了。
unsafe的基本用法
-
用于修饰函数
1
2
3
4
5
6
7//unsafe 修饰函数后,函数参数可以使用指针
public unsafe void CopyInfo(byte* src, byte* dst, int count)
{
//函数内部也可以使用指针
int i = 3;
int* testInt = &i;
} -
用于修饰代码块
1
2
3
4
5
6
7
8
9
10public void TestFun()
{
unsafe
{
int i = 3;
int* testInt = &i;
print("值为:" + i);
print("地址是:" + (int)testInt);
}
} -
用于修饰成员变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19public class TestClass
{
//unsafe 修饰成员变量 可以声明指针成员
public unsafe int* p;
//在非unsafe的语句块中不能直接使用
public void TestFun()
{
int i = 3;
//p = &i; //本句会报错
}
//还是需要在unsafe声明的语句块中使用
public unsafe void TestFun()
{
int i = 3;
p = &i;
}
} -
用于修饰类
1
2
3
4
5
6
7
8
9//通过unsafe修饰类,可以在类中随意使用指针
public unsafe class TestClass
{
public int* p;
public byte* TestFun(byte* array)
{
return null;
}
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!