因此,有人告诉我编译器将带有签名in char
的参数转换为char*
:
此外,如果它是
in
,则不应指定指针。in
使其成为引用类型。in float
等同于const float*
。
这让我开始思考。 out char
还会翻译成char*
吗?为什么编译器会这样做?这与[In]
和[Out]
属性的用法相比如何?
答案 0 :(得分:8)
有人告诉我编译器将带有签名
in char
的参数转换为char*
任何人告诉您,这种情况不能很好地解释。也许他们正试图比作C? C#引用类似于C中的指针,但它们并不相同。更好的类比是C ++引用,但它们也不完全相同。与其尝试通过类似于另一种语言来理解该功能,不如根据其文档来理解该功能。
考虑这一点的正确方法是in
,out
和ref
都要求与形式参数相对应的参数为变量,形式变量成为变量参数的 alias 。那是您应该考虑的抽象级别。
实际上,in
,out
和ref
是通过使用指向变量的托管指针实现的。但是,您不要将其视为char*
。这就是指向变量的 unmanaged 指针的类型。托管指针具有许多属性,这些属性不是非托管指针的属性。例如,面对垃圾收集器压缩区域时,它们很坚固。例如,您可以使一个托管指针指向托管类型,但不能使非托管指针指向托管类型。依此类推。
为什么编译器会这样做?
因为这样做正确地实现了规范。
这与
[In]
和[Out]
属性的用法相比如何?
我不明白您希望将两件事进行比较。这个问题还不清楚。
将这些属性用于COM互操作。如果不清楚这些属性的用途,请阅读文档。