我最近发现,在使用C#/Mono的某些概念时,我需要指定“unsafe”选项。不仅要在我的代码中指定该选项,还必须在编译代码时指定它,这会引起“此代码本质上是不安全和有风险的”的感觉。奇怪的是,DllImport不需要unsafe标记,因此我可以在“安全代码”中尽情地创建段错误。我是否忽略了避免使用unsafe代码的任何原因?
我最近发现,在使用C#/Mono的某些概念时,我需要指定“unsafe”选项。不仅要在我的代码中指定该选项,还必须在编译代码时指定它,这会引起“此代码本质上是不安全和有风险的”的感觉。奇怪的是,DllImport不需要unsafe标记,因此我可以在“安全代码”中尽情地创建段错误。我是否忽略了避免使用unsafe代码的任何原因?
DllImport 是大多数 C# 开发人员都非常熟悉的概念。它也导致了一个相对较小的区域可能会发生段错误。使用 unsafe
代码,你可以更容易地创建随机崩溃,并且在与 unsafe
调用无关的位置(通过操作超出你所认为的内存区域之外的内存区域)。
这很像编译器警告 - 一些开发人员不注意它们,有些则将 "处理警告作为错误" 打开到 "全部"。猜猜哪种方式可以得到更易于维护的代码?
此外,只要能够避免使用 DllImport (由于潜在的故障 / 错误漏检 / 可移植性问题等),就不是一个好主意。