[Out] 和 out 的区别?

kenshu 2018-03-13 03:42:36
新手,实在找不到关于[Out] 的说明。

但它们确实有区别。

比如

[DllImport("kernel32.dll", EntryPoint = "GetModuleFileName")]
private static extern uint GetModuleFileName(IntPtr hModule, [Out] StringBuilder lpszFileName, int nSize);

可以正确调用

[DllImport("kernel32.dll", EntryPoint = "GetModuleFileName")]
private static extern uint GetModuleFileName(IntPtr hModule, out StringBuilder lpszFileName, int nSize);

无法正确调用。
...全文
313 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2018-03-28
  • 打赏
  • 举报
回复
在类上,属性上,方法上的方括号标记,C#里叫特性,java里叫注解 java的翻译比较准确,那个实际就是 “注解”,用来表明那些东西的元数据属性 如果你还不明白,那就看下面这个,有关c++的_out_说明(下文说明,这个玩意并不参与实际编译,它仅仅是对程序员起到提示作用,让程序员明白如何调用该函数,当然在C#里特性标记通常会产生一定的元数据) https://blog.csdn.net/a1009563517/article/details/51804543 ps:如果你想百度到他请使用“OutAttribute”做关键字,前面已经说了他只是特性标注(Attribute),而语法非关键词out
kenshu 2018-03-28
  • 打赏
  • 举报
回复
引用 5 楼 wanghui0380 的回复:
请仔细看回复,给你的知乎回答上说的很清楚了,请看msdn上的mask说明 同时人家也已经说了,[Out]不等于out,只是从行为上大体类似[Out] ref 当然我的说out是C#关键字, [Out]不是关键字,只是一个可选项特性。
因为没用过C#,所以,我相信是我自己的问题问得不对。 我想的问题应该是"[Out]"是什么意思(因为BAIDU/GOOGLE根本找不到,它们会把中括号过滤掉,导致我找到的完全是类似 "out" 和 "ref" 的区别之类的)
kenshu 2018-03-28
  • 打赏
  • 举报
回复
这样就明白了,谢谢!
wanghui0380 2018-03-13
  • 打赏
  • 举报
回复
请仔细看回复,给你的知乎回答上说的很清楚了,请看msdn上的mask说明 同时人家也已经说了,[Out]不等于out,只是从行为上大体类似[Out] ref 当然我的说out是C#关键字, [Out]不是关键字,只是一个可选项特性。
kenshu 2018-03-13
  • 打赏
  • 举报
回复
为什么声明为 [Out] StringBuilder lpszFileName 就可以正常运行, 声明为 out StringBuilder lpszFileName 就不能正常运行。
kenshu 2018-03-13
  • 打赏
  • 举报
回复
我的问题是 "[Out]" 和 "out" 是不同的。而不是out/in/ref的区别
wanghui0380 2018-03-13
  • 打赏
  • 举报
回复
具体你可以看 https://www.zhihu.com/question/60825396/answer/180655545
wanghui0380 2018-03-13
  • 打赏
  • 举报
回复
[Out] 显示指明是输出参数 [In]显示指明是输入参数 [Out]他不对应ref,至少对于由己声明的引用类型对象是不需要的。只有值对象是需要ref的

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧