在Mono中避免使用"unsafe"有什么意义吗?

5

我最近发现,在使用C#/Mono的某些概念时,我需要指定“unsafe”选项。不仅要在我的代码中指定该选项,还必须在编译代码时指定它,这会引起“此代码本质上是不安全和有风险的”的感觉。奇怪的是,DllImport不需要unsafe标记,因此我可以在“安全代码”中尽情地创建段错误。我是否忽略了避免使用unsafe代码的任何原因?


你会因为与.NET Framework下避免它的原因而避免它。正如Skolima所指出的,unsafe意味着理论上你将处理代码的所有内容。这意味着如果你想留下无法清除的内存内容,你可以完全这样做。我不同意DllImport不是一个好主意的评论。 - Security Hound
1个回答

7

DllImport 是大多数 C# 开发人员都非常熟悉的概念。它也导致了一个相对较小的区域可能会发生段错误。使用 unsafe 代码,你可以更容易地创建随机崩溃,并且在与 unsafe 调用无关的位置(通过操作超出你所认为的内存区域之外的内存区域)。

这很像编译器警告 - 一些开发人员不注意它们,有些则将 "处理警告作为错误" 打开到 "全部"。猜猜哪种方式可以得到更易于维护的代码?

此外,只要能够避免使用 DllImport (由于潜在的故障 / 错误漏检 / 可移植性问题等),就不是一个好主意。


1
没错。基本上,一个不安全的代码块就像是一面大红旗,告诉你“嘿,这段代码实际上是不安全的,使用它很有风险!”因为它确实如此;你关闭了原本为了防止不安全代码出错而设置的保护措施。 - Andy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接