Under System.Runtime.InteropServices
the <Out()>
属性存在。
但它有什么用呢?如果您可以使用以下示例作为答案的基础,我将很高兴。
Shared Sub Add(ByVal x As Integer, ByVal y As Integer, <Out()> ByRef Result As Integer)
Result = x + y
End Sub
该属性的目的有两个:
如果您要从 C# 或具有类似语义的类似语言调用该方法,编译器将知道此类参数不需要初始值。
换句话说,你可以这样做:
int a;
CallSomeMethodWithOutParameter(out a);
并且编译器知道不需要确保a
在拨打电话之前已经有一个值。
另一方面,如果没有该属性,则需要以下内容(同样在 C# 中):
int a = 0; // <-- notice initialization here
CallSomeMethodWithOutParameter(ref a); // <-- and ref here
另一个目的是用于将被编组到不同调用上下文中的方法调用,例如通过 P/Invoke 编组到不同的应用程序域或 Web 服务,以通知编组例程相关参数将包含一个值当方法返回时,但调用方法时不需要向方法传递任何值。
当需要打包参数和返回值并将其传输到实际调用所经过的远程位置时,这可能会产生影响。
换句话说,如果您要指定在通过 P/Invoke 使用的方法调用上,则当该方法被调用时,不会对现有参数值进行编组。called,但是当该方法returns它的值被提升回您的调用代码中。
请注意,此优化取决于要使用或不使用的编组例程,这些是实现细节。该属性只是告诉例程它的参数can这样做,这并不是一条永远要遵循的指令。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)