您应该在C#代码中使用指针吗?有什么好处?微软推荐吗?
来自“男人”本人:
在C#中很少需要使用指针,但是在某些情况下需要使用它们。例如,在以下情况下,可以使用不安全的上下文来允许指针:
不建议在其他情况下使用不安全的上下文。
特别是,不安全的上下文不应用于尝试用C#编写C代码。
注意:
使用不安全的上下文编写的代码不能被验证为安全的,因此只有在完全信任代码的情况下才会执行该代码。换句话说,不安全的代码不能在不受信任的环境中执行。例如,您不能直接从Internet运行不安全的代码。
如果需要。
假设您需要对大型灰度图像(例如2000x2000像素)进行假彩色处理。首先使用GetPixel()
和SetPixel()
编写“安全”版本。如果可行,那就继续吧。如果证明速度太慢,则可能需要了解构成图像的实际位(为方便起见,请忽略颜色矩阵)。使用不安全的代码没有什么“坏”之处,但是它增加了项目的复杂性,因此仅在必要时使用。
我不记得要这么做了-但是我没有做太多的互操作。我相信,这是最常见的应用程序:调用本机代码。在极少数情况下,使用指针可以使您优化某些代码,但是根据我的经验,这很少见。
[如果有任何指导,我认为自己在C#方面很有经验,但是如果我必须执行任何不安全的代码,则必须查阅spec / books / MSDN来指导我。当然,会有很多人对不安全的代码感到满意,但对(例如)查询表达式不那么了解...
我会说主要问题是:-
哦,关于固定here on MSDN的不错的文章。
大多数这里的人们会说“不做”。绝大多数.NET开发人员在正常活动中不会遇到只能通过使用不安全代码解决的情况。
unsafe
代码的功能。从关键字的选择以及使用关键字描述在其中编写方法/类的要求中可以看出,它并不是实际的实现选择。[坦率地说,对存储结构中的(非常特定的)极其快速的二进制序列化(通过对它们的数组进行处理),尽管说实话,最好只使用C ++ / CLI。
必须说,在许多情况下,可以通过在C ++ / CLI中完成处理指针的任务,然后将其作为dll导入到c#项目中来更好地解决。它不会改变代码是否“安全”,但是它使使用基于指针的结构的大量有用函数更易于访问。如果您确实愿意,它还可以使您迷惑通用类型或枚举。
大多数开发人员需要这样做的可能性确实很小。不过,当您需要时很有用...