Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有必要避免使用“;“不安全”;单声道?_C#_Mono_Unsafe - Fatal编程技术网

C# 有没有必要避免使用“;“不安全”;单声道?

C# 有没有必要避免使用“;“不安全”;单声道?,c#,mono,unsafe,C#,Mono,Unsafe,我最近遇到这样一个事实:在C#/Mono中处理某些概念时,我需要指定“不安全”选项。我不仅必须在代码中指定该选项,还必须在编译时指定它,这会让人感觉“这段代码本质上是不安全的,使用起来有风险”。奇怪的是DllImport不需要不安全标志,所以我可以在“安全代码”中创建我想要的所有segfaults。有什么理由避免我忽略的不安全代码吗?对于大多数C#开发人员来说,DllImport是一个众所周知的概念。这也会导致出现断层的区域相对较小。使用unsafe代码,您可以更容易地在与unsafe调用无关的

我最近遇到这样一个事实:在C#/Mono中处理某些概念时,我需要指定“不安全”选项。我不仅必须在代码中指定该选项,还必须在编译时指定它,这会让人感觉“这段代码本质上是不安全的,使用起来有风险”。奇怪的是DllImport不需要不安全标志,所以我可以在“安全代码”中创建我想要的所有segfaults。有什么理由避免我忽略的不安全代码吗?

对于大多数C#开发人员来说,DllImport是一个众所周知的概念。这也会导致出现断层的区域相对较小。使用
unsafe
代码,您可以更容易地在与
unsafe
调用无关的地方创建随机崩溃(通过在您认为触摸的对象之外操纵内存区域)

这很像编译器警告——有些开发人员不注意它们,有些人将“将警告视为错误”改为“全部”。猜猜是什么导致代码更易于维护


另外,如果可以避免的话,DllImport本身也不是一个好主意(因为潜在的破坏/遗漏错误/可移植性问题等等)。

您可以避免它,原因与在.NET框架下避免它相同。正如Skolima所指出的,不安全意味着您将在理论上处理有关代码的一切。这意味着,如果你想在内存中留下无法清理的东西,你完全可以这样做。我不同意德林波特不是一个好主意的评论。基本上,一个不安全的代码块就是一个大红旗,上面写着“嘿,这个代码实际上是不安全的,使用起来很危险!”因为它是;你已经关闭了安全防护装置,因为不安全的代码很容易在一开始就弄糟。