方向属性

作者: Lewis Jackson
创建日期: 8 可能 2021
更新日期: 23 六月 2024
Anonim
18 栈的属性和buf地址增长方向是两个不同的概念
视频: 18 栈的属性和buf地址增长方向是两个不同的概念

内容

定义-方向属性是什么意思?

在C#中,方向属性是用于指定对象方法参数的标签,这些参数具有与调用方和被调用方之间的数据定向流有关的信息。

方向属性控制方法参数方向和返回值的编组(对象准备为跨应用程序或过程边界传输)。方向属性用于在通信由公共语言运行时(CLR)执行的托管代码和在CLR的控制范围之外执行的非托管代码时,修改运行时封送处理。


Microsoft Azure和Microsoft Cloud简介在本指南中,您将了解什么是云计算,以及Microsoft Azure如何帮助您从云迁移和运行业务。

技术百科解释了方向属性

InAttribute和OutAttribute是用于映射到组件对象模型(COM)接口定义语言(IDL)属性的两个C#定向属性。 InAttribute映射到,而OutAttribute映射到。托管方法签名返回值映射到类型库中。必须为方法参数指定正确的方向属性,以便导出类型库正确设置输入/输出位。

通过将InAttribute和OutAttribute应用到数组和格式化的不可复制类型(不具有公共托管和非托管内存表示形式)中,调用方可以看到被调用方的更改。应用于这些类型的方向属性可减少在编组过程中不必要的副本。

在C#中,在呼叫者和被呼叫者通信期间,InAttribute和OutAttribute以三种形式使用,带有两个关键字,如下所示:

  • “出” –暗示
  • “ ref” –表示,
  • (未指定)–(默认情况下)

out和ref关键字用于值类型和可序列化的引用类型。 ref关键字表示该参数在两个方向上均已编组,而out表示被调用者数据传输。当不使用ref或out时,这表示数据已传输到被调用方。

例如,.NET客户端应用程序将输入值输入COM组件方法,该方法计算输入值结果并将结果返回给客户端。通过指示输入值和结果所需的编组类型,可以将方向属性应用于服务请求的方法的参数。

方向属性具有以下特征:

  • 可选,在设计时应用于方法参数
  • 仅支持COM互操作和平台调用
  • InAttribute不能应用于带有out关键字的参数

CLR互操作性封送程序通过在运行时通过处理方法调用参数并在托管和非托管内存之间返回值来提供封送服务。如果未定义方向属性,则封送拆封器将根据参数类型和修饰符(如果有)来确定方向流。封送处理程序以以下方式运行:


  • 它不会覆盖非托管代码中作为“ In”参数传递的数据。因此,只能传递只读数据,例如并发访问的数据。
  • 在传递具有确定的内存分配的对象(例如基本或二进制字符串(BSTR))时,将根据输入/输出设置遵循正确的分配/取消分配顺序。
这个定义是用C#编写的