加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

.net – 属性.有用的目的是服务吗?

发布时间:2020-12-17 00:21:58 所属栏目:大数据 来源:网络整理
导读:在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 该属性的目的是双
在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
该属性的目的是双重的:

>呼叫站点处理,是否强制执行变量初始化
>编组

如果您要从C#或具有类似语义的类似语言调用该方法,编译器将知道这样的参数不需要初始值.

换句话说,你可以这样做:

int a;
CallSomeMethodWithOutParameter(out a);

并且编译器知道在进行调用之前不需要确保已经有值.

另一方面,如果没有该属性,则需要在C#中再次使用以下内容:

int a = 0;                               // <-- notice initialization here
CallSomeMethodWithOutParameter(ref a);   // <-- and ref here

另一个目的是将方法调用编组到不同的调用上下文中,例如通过P / Invoke,到另一个应用程序域或Web服务,以通知编组例程有问题的参数将包含一个值当方法返回时,但在调用它时不需要将任何值传递给方法.

当参数和返回值需要打包并传输到实际呼叫所经过的远程位置时,这可能会有所不同.

换句话说,如果要在通过P / Invoke使用的方法调用上指定它,则在调用方法时不会对现有参数值进行编组,但是当方法返回时,其值将被提升回调用代码.

请注意,此优化取决于要使用的编组例程,这些是实现细节.该属性只告诉例程它可以执行哪些参数,它不是始终遵循的指令.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读