以下内容来自微软,
你编写的大部分 C# 代码都是“可验证的安全代码”。可验证的安全代码是指 .NET 工具可验证代码是否安全。 通常,安全代码不会直接使用指针访问内存, 也不会分配原始内存, 而是创建托管对象。
C# 支持 unsafe 上下文,你可在其中编写不可验证的代码。 在 unsafe 上下文中,代码可使用指针、分配和释放内存块,以及使用函数指针调用方法。 C# 中的不安全代码不一定是危险的,它只是其安全性不可验证的代码。
按此描述,
我们一般情况下写的C#代码都是安全代码;
如果使用了unsafe关键字,其中的代码就是不安全代码;
安全代码使用内存都是创建托管对象;
托管对象是指,托管对象指的是.net可以自动进行回收的资源,主要是指托管对象在堆上分配的内存资源。托管资源的回收工作是不需要人工干预的,有.net运行库在合适的时间进行回收。(手动回收可调用GC.Collect)