in char转换为char *,但是char转换为char *吗?

时间:2018-12-29 19:59:45

标签: c# .net cil

因此,有人告诉我编译器将带有签名in char的参数转换为char*

  

此外,如果它是in,则不应指定指针。   in使其成为引用类型。   in float等同于const float*

这让我开始思考。 out char还会翻译成char*吗?为什么编译器会这样做?这与[In][Out]属性的用法相比如何?

1 个答案:

答案 0 :(得分:8)

  

有人告诉我编译器将带有签名in char的参数转换为char*

任何人告诉您,这种情况不能很好地解释。也许他们正试图比作C? C#引用类似于C中的指针,但它们并不相同。更好的类比是C ++引用,但它们也不完全相同。与其尝试通过类似于另一种语言来理解该功能,不如根据其文档来理解该功能。

考虑这一点的正确方法是inoutref都要求与形式参数相对应的参数为变量,形式变量成为变量参数的 alias 。那是您应该考虑的抽象级别。

实际上,inoutref是通过使用指向变量的托管指针实现的。但是,您不要将其视为char*。这就是指向变量的 unmanaged 指针的类型。托管指针具有许多属性,这些属性不是非托管指针的属性。例如,面对垃圾收集器压缩区域时,它们很坚固。例如,您可以使一个托管指针指向托管类型,但不能使非托管指针指向托管类型。依此类推。

  

为什么编译器会这样做?

因为这样做正确地实现了规范。

  

这与[In][Out]属性的用法相比如何?

我不明白您希望将两件事进行比较。这个问题还不清楚。

将这些属性用于COM互操作。如果不清楚这些属性的用途,请阅读文档。