OutAttribute 类

指示应将数据从被调用方封送回调用方。

**命名空间:**System.Runtime.InteropServices
**程序集:**mscorlib(在 mscorlib.dll 中)

语法

声明
<ComVisibleAttribute(True)> _
<AttributeUsageAttribute(AttributeTargets.Parameter, Inherited:=False)> _
Public NotInheritable Class OutAttribute
    Inherits Attribute
用法
Dim instance As OutAttribute
[ComVisibleAttribute(true)] 
[AttributeUsageAttribute(AttributeTargets.Parameter, Inherited=false)] 
public sealed class OutAttribute : Attribute
[ComVisibleAttribute(true)] 
[AttributeUsageAttribute(AttributeTargets::Parameter, Inherited=false)] 
public ref class OutAttribute sealed : public Attribute
/** @attribute ComVisibleAttribute(true) */ 
/** @attribute AttributeUsageAttribute(AttributeTargets.Parameter, Inherited=false) */ 
public final class OutAttribute extends Attribute
ComVisibleAttribute(true) 
AttributeUsageAttribute(AttributeTargets.Parameter, Inherited=false) 
public final class OutAttribute extends Attribute

备注

可以将此属性应用到参数。

OutAttribute 是可选项。只有 COM Interop 和平台调用才支持此属性。如果缺少显式设置,Interop 封送拆收器将根据参数类型来假定规则,不论参数是通过引用传递还是通过值传递,也不论类型是可直接复制到本机结构中,还是不能直接复制到本机结构中。例如,始终假定 StringBuilder 类为 In/Out,并假定通过值传递的字符串数组为 In。

Out-only 行为从不是参数的默认封送处理行为。可将 OutAttribute 应用于通过引用传递的值类型和参考类型,以将 In/Out 行为改为 Out-only 行为,这种做法与在 C# 中使用 out 关键字是等效的。例如,可以将由值传递的、默认作为 In-only 参数封送的数组更改为 Out-only。但是,如果由于 interop 封送拆收器使用固定处理而使类型包含了皆可直接复制到本机结构中的元素或字段,则该行为并不总能提供所需的语义。如果您不介意是否将数据传递到被调用方,则 Out-only 封送处理可以为非直接复制到本机结构中的类型提供更好的性能。

当应用于数组和已设置格式的、非直接复制到本机结构中的类型时,InAttributeOutAttribute 结合起来使用特别有用。仅当同时应用这两个属性时,调用方才能看到被调用方对这些类型所做的更改。由于这些类型要求在封送处理期间进行复制,因此可以使用 InAttributeOutAttribute 以减少不必要的副本。

有关 OutAttribute 对封送处理行为的影响的更多信息,请参见 方向属性

示例

下面的示例演示如何将 InAttributeOutAttribute 应用于将数组作为参数传递的平台调用原型。方向性属性的组合允许调用方查看由被调用方所做的更改。

' Declare a class member for each structure element.
< StructLayout( LayoutKind.Sequential, CharSet:=CharSet.Auto )> _
Public Class OpenFileName

   Public structSize As Integer = 0
   Public filter As String = Nothing
   Public file As String = Nothing
   ' ...
   
End Class 'OpenFileName

Public Class LibWrap
   ' Declare managed prototype for the unmanaged function.
   Declare Auto Function GetOpenFileName Lib "Comdlg32.dll" ( _
      <[In], Out> ByVal ofn As OpenFileName ) As Boolean
End Class 'LibWrap
// Declare a class member for each structure element.
[ StructLayout( LayoutKind.Sequential, CharSet=CharSet.Auto )]  
public class OpenFileName 
{
    public int       structSize = 0;
    public string    filter = null;
    public string    file = null;
    // ...
}

public class LibWrap
{
   // Declare a managed prototype for the unmanaged function.
   [ DllImport( "Comdlg32.dll", CharSet=CharSet.Auto )]
   public static extern bool GetOpenFileName([ In, Out ] OpenFileName ofn );  
}
// Declare a class member for each structure element.

[StructLayout(LayoutKind::Sequential,CharSet=CharSet::Auto)]
public ref class OpenFileName
{
public:
   int structSize;
   String^ filter;
   String^ file;
   // ...
};

public ref class LibWrap
{
public:

   // Declare a managed prototype for the unmanaged function.

   [DllImport("Comdlg32.dll",CharSet=CharSet::Auto)]
   static bool GetOpenFileName( [In,Out]OpenFileName^ ofn );
};
// Declare a class member for each structure element.
/** @attribute StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)
 */
public class OpenFileName
{
    public int structSize = 0;
    public String filter = null;
    public String file = null;
    // ...
} //OpenFileName

public class LibWrap
{
    // Declare a managed prototype for the unmanaged function.
    /** @attribute DllImport("Comdlg32.dll", CharSet = CharSet.Auto)
     */
    public static native boolean GetOpenFileName(
        /** @attribute In()
            @attribute Out()
         */
        OpenFileName ofn);
} //LibWrap

继承层次结构

System.Object
   System.Attribute
    System.Runtime.InteropServices.OutAttribute

线程安全

此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。

平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

.NET Compact Framework

受以下版本支持:2.0、1.0

请参见

参考

OutAttribute 成员
System.Runtime.InteropServices 命名空间
InAttribute 类
StringBuilder

其他资源

可直接复制到本机结构中的类型和非直接复制到本机结构中的类型