OrE*_*lse 7 .net vb.net attributes output-parameter
在System.Runtime.InteropServices
该<Out()>
属性存在.但这是为了什么?如果您可以使用以下示例作为答案的基础,我将很高兴.
Shared Sub Add(ByVal x As Integer, ByVal y As Integer, <Out()> ByRef Result As Integer)
Result = x + y
End Sub
Run Code Online (Sandbox Code Playgroud)
该属性的目的是双重的:
如果您要从C#或具有类似语义的类似语言调用该方法,编译器将知道这样的参数不需要初始值.
换句话说,你可以这样做:
int a;
CallSomeMethodWithOutParameter(out a);
Run Code Online (Sandbox Code Playgroud)
并且编译器知道a
在进行调用之前不需要确保已经有值.
另一方面,如果没有该属性,则需要以下内容,同样在C#中:
int a = 0; // <-- notice initialization here
CallSomeMethodWithOutParameter(ref a); // <-- and ref here
Run Code Online (Sandbox Code Playgroud)
另一个目的是将方法调用编组到不同的调用上下文中,例如通过P/Invoke,到另一个应用程序域或Web服务,以通知编组例程有问题的参数将包含一个值当方法返回时,但在调用它时不需要将任何值传递给方法.
当参数和返回值需要打包并传输到实际调用通过的远程位置时,这可能会有所不同.
换句话说,如果你指定通过的P/Invoke使用的方法调用,没有编组将现有的参数值,完成后该方法被称为,但是当该方法返回其值解禁复出到您的调用代码.
请注意,此优化取决于要使用的编组例程,这些是实现细节.该属性只告诉例程它可以执行哪些参数,它不是始终遵循的指令.
归档时间: |
|
查看次数: |
1927 次 |
最近记录: |