<Type Name="MarshalAsAttribute" FullName="System.Runtime.InteropServices.MarshalAsAttribute" FullNameSP="System_Runtime_InteropServices_MarshalAsAttribute" Maintainer="ecma">
  <TypeSignature Language="ILASM" Value=".class public sealed MarshalAsAttribute extends System.Attribute" />
  <TypeSignature Language="C#" Value="public sealed class MarshalAsAttribute : Attribute" />
  <TypeSignature Language="ILAsm" Value=".class public sequential ansi sealed beforefieldinit MarshalAsAttribute extends System.Attribute" />
  <MemberOfLibrary>RuntimeInfrastructure</MemberOfLibrary>
  <AssemblyInfo>
    <AssemblyName>mscorlib</AssemblyName>
    <AssemblyPublicKey>[00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 ]</AssemblyPublicKey>
    <AssemblyVersion>1.0.5000.0</AssemblyVersion>
    <AssemblyVersion>2.0.0.0</AssemblyVersion>
    <AssemblyVersion>4.0.0.0</AssemblyVersion>
  </AssemblyInfo>
  <ThreadingSafetyStatement>All public static members of this type are safe for multithreaded operations. No instance members are guaranteed to be thread safe.</ThreadingSafetyStatement>
  <Base>
    <BaseTypeName>System.Attribute</BaseTypeName>
  </Base>
  <Interfaces />
  <Attributes>
    <Attribute>
      <AttributeName>System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.ReturnValue | System.AttributeTargets.All, Inherited=false)</AttributeName>
    </Attribute>
    <Attribute>
      <AttributeName>System.Runtime.InteropServices.ComVisible(true)</AttributeName>
    </Attribute>
  </Attributes>
  <Docs>
    <summary>
      <para> Specifies how data is to be marshaled between managed and unmanaged code.</para>
    </summary>
    <remarks>
      <para>This attribute can be applied to parameters, fields, or return values.</para>
      <para> Each data type has a default marshaling behavior that is used
      if this attribute is not present. This attribute is only required when a type
      can be marshaled as more than one possible types. <block subset="none" type="note">The <see cref="T:System.Runtime.InteropServices.UnmanagedType" /> enumeration specifies possible
      data types.</block></para>
      <para>Compilers are required to not preserve this type
      in metadata as a custom attribute. Instead, compilers are required to emit it
      directly in the file format, as described in Partition II of the CLI
      Specification. Metadata consumers, such as the Reflection API, are required to
      retrieve this data from the file format and return it as if it were a custom
      attribute. </para>
    </remarks>
  </Docs>
  <Members>
    <Member MemberName=".ctor">
      <MemberSignature Language="ILASM" Value="public rtspecialname specialname instance void .ctor(int16 unmanagedType)" />
      <MemberSignature Language="C#" Value="public MarshalAsAttribute (short unmanagedType);" />
      <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor(int16 unmanagedType) cil managed" />
      <MemberType>Constructor</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5000.0</AssemblyVersion>
        <AssemblyVersion>2.0.0.0</AssemblyVersion>
        <AssemblyVersion>4.0.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue />
      <Parameters>
        <Parameter Name="unmanagedType" Type="System.Int16" />
      </Parameters>
      <Docs>
        <param name="unmanagedType">A <see cref="T:System.Int16" /> containing a <see cref="T:System.Runtime.InteropServices.UnmanagedType" /> value indicating how the data is to be marshaled.</param>
        <summary>
          <para>Constructs and initializes a new instance of the <see cref="T:System.Runtime.InteropServices.MarshalAsAttribute" /> class with the specified
   value.</para>
        </summary>
        <remarks>To be added.</remarks>
      </Docs>
      <Excluded>0</Excluded>
    </Member>
    <Member MemberName=".ctor">
      <MemberSignature Language="ILASM" Value="public rtspecialname specialname instance void .ctor(valuetype System.Runtime.InteropServices.UnmanagedType unmanagedType)" />
      <MemberSignature Language="C#" Value="public MarshalAsAttribute (System.Runtime.InteropServices.UnmanagedType unmanagedType);" />
      <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor(valuetype System.Runtime.InteropServices.UnmanagedType unmanagedType) cil managed" />
      <MemberType>Constructor</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5000.0</AssemblyVersion>
        <AssemblyVersion>2.0.0.0</AssemblyVersion>
        <AssemblyVersion>4.0.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue />
      <Parameters>
        <Parameter Name="unmanagedType" Type="System.Runtime.InteropServices.UnmanagedType" />
      </Parameters>
      <Docs>
        <param name="unmanagedType">A <see cref="T:System.Runtime.InteropServices.UnmanagedType" /> value indicating how the data is to be marshaled.</param>
        <summary>
          <para>Constructs and initializes a new instance of the <see cref="T:System.Runtime.InteropServices.MarshalAsAttribute" /> class with the
   specified <see cref="T:System.Runtime.InteropServices.UnmanagedType" />
   value.</para>
        </summary>
        <remarks>To be added.</remarks>
      </Docs>
      <Excluded>0</Excluded>
    </Member>
    <Member MemberName="ArraySubType">
      <MemberSignature Language="ILASM" Value=".field public valuetype System.Runtime.InteropServices.UnmanagedType ArraySubType" />
      <MemberSignature Language="C#" Value="public System.Runtime.InteropServices.UnmanagedType ArraySubType;" />
      <MemberSignature Language="ILAsm" Value=".field public valuetype System.Runtime.InteropServices.UnmanagedType ArraySubType" />
      <MemberType>Field</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5000.0</AssemblyVersion>
        <AssemblyVersion>2.0.0.0</AssemblyVersion>
        <AssemblyVersion>4.0.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Runtime.InteropServices.UnmanagedType</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>
          <para>A <see cref="T:System.Runtime.InteropServices.UnmanagedType" /> enumeration value that
   specifies the type of elements in an array.</para>
        </summary>
        <remarks>To be added.</remarks>
      </Docs>
      <Excluded>0</Excluded>
    </Member>
    <Member MemberName="IidParameterIndex">
      <MemberSignature Language="C#" Value="public int IidParameterIndex;" />
      <MemberSignature Language="ILAsm" Value=".field public int32 IidParameterIndex" />
      <MemberType>Field</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>2.0.0.0</AssemblyVersion>
        <AssemblyVersion>4.0.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Int32</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>To be added.</summary>
        <remarks>To be added.</remarks>
        <since version=".NET 2.0" />
      </Docs>
    </Member>
    <Member MemberName="MarshalCookie">
      <MemberSignature Language="ILASM" Value=".field public string MarshalCookie" />
      <MemberSignature Language="C#" Value="public string MarshalCookie;" />
      <MemberSignature Language="ILAsm" Value=".field public string MarshalCookie" />
      <MemberType>Field</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5000.0</AssemblyVersion>
        <AssemblyVersion>2.0.0.0</AssemblyVersion>
        <AssemblyVersion>4.0.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.String</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>
          <para>A <see cref="T:System.String" /> that is used with
<see cref="F:System.Runtime.InteropServices.UnmanagedType.CustomMarshaler" /> to hold a cookie that is passed 
   to the custom marshaler. The value of the cookie is defined by the custom
   marshaler implementation.</para>
        </summary>
        <remarks>
          <para>This field is used 
      only with <see cref="F:System.Runtime.InteropServices.UnmanagedType.CustomMarshaler" />
      and is optional.</para>
        </remarks>
      </Docs>
      <Excluded>0</Excluded>
    </Member>
    <Member MemberName="MarshalType">
      <MemberSignature Language="ILASM" Value=".field public string MarshalType" />
      <MemberSignature Language="C#" Value="public string MarshalType;" />
      <MemberSignature Language="ILAsm" Value=".field public string MarshalType" />
      <MemberType>Field</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5000.0</AssemblyVersion>
        <AssemblyVersion>2.0.0.0</AssemblyVersion>
        <AssemblyVersion>4.0.0.0</AssemblyVersion>
      </AssemblyInfo>
      <Attributes>
        <Attribute>
          <AttributeName>System.Runtime.InteropServices.ComVisible(true)</AttributeName>
        </Attribute>
      </Attributes>
      <ReturnValue>
        <ReturnType>System.String</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>
          <para>A <see cref="T:System.String" />
that identifies the <see cref="T:System.Type" /> of a custom
marshaler.</para>
        </summary>
        <remarks>
          <para>This field is used only with <see cref="F:System.Runtime.InteropServices.UnmanagedType.CustomMarshaler" /> and is
   required.</para>
          <para>A custom marshaler is a type that is capable of marshaling calls from a
   specific managed type to a specific unmanaged type and vice versa.</para>
        </remarks>
      </Docs>
      <Excluded>0</Excluded>
    </Member>
    <Member MemberName="MarshalTypeRef">
      <MemberSignature Language="ILASM" Value=".field public class System.Type MarshalTypeRef" />
      <MemberSignature Language="C#" Value="public Type MarshalTypeRef;" />
      <MemberSignature Language="ILAsm" Value=".field public class System.Type MarshalTypeRef" />
      <MemberType>Field</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5000.0</AssemblyVersion>
        <AssemblyVersion>2.0.0.0</AssemblyVersion>
        <AssemblyVersion>4.0.0.0</AssemblyVersion>
      </AssemblyInfo>
      <Attributes>
        <Attribute>
          <AttributeName>System.Runtime.InteropServices.ComVisible(true)</AttributeName>
        </Attribute>
      </Attributes>
      <ReturnValue>
        <ReturnType>System.Type</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>
          <para>Specifies the managed <see cref="T:System.Type" /> of the argument being marshaled.</para>
        </summary>
        <remarks>
          <para>This field is used only with <see cref="F:System.Runtime.InteropServices.UnmanagedType.CustomMarshaler" /> 
and is required.</para>
        </remarks>
      </Docs>
      <Excluded>0</Excluded>
    </Member>
    <Member MemberName="SafeArraySubType">
      <MemberSignature Language="C#" Value="public System.Runtime.InteropServices.VarEnum SafeArraySubType;" />
      <MemberSignature Language="ILAsm" Value=".field public valuetype System.Runtime.InteropServices.VarEnum SafeArraySubType" />
      <MemberType>Field</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5000.0</AssemblyVersion>
        <AssemblyVersion>2.0.0.0</AssemblyVersion>
        <AssemblyVersion>4.0.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Runtime.InteropServices.VarEnum</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>To be added.</summary>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="SafeArrayUserDefinedSubType">
      <MemberSignature Language="C#" Value="public Type SafeArrayUserDefinedSubType;" />
      <MemberSignature Language="ILAsm" Value=".field public class System.Type SafeArrayUserDefinedSubType" />
      <MemberType>Field</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5000.0</AssemblyVersion>
        <AssemblyVersion>2.0.0.0</AssemblyVersion>
        <AssemblyVersion>4.0.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Type</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>To be added.</summary>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="SizeConst">
      <MemberSignature Language="ILASM" Value=".field public int32 SizeConst" />
      <MemberSignature Language="C#" Value="public int SizeConst;" />
      <MemberSignature Language="ILAsm" Value=".field public int32 SizeConst" />
      <MemberType>Field</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5000.0</AssemblyVersion>
        <AssemblyVersion>2.0.0.0</AssemblyVersion>
        <AssemblyVersion>4.0.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Int32</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>
          <para>A <see cref="T:System.Int32" /> that specifies the size, in bytes, of the constant size array being
   marshaled.</para>
        </summary>
        <remarks>
          <para> This field is
      used only with the <see cref="F:System.Runtime.InteropServices.UnmanagedType.ByValArray" />
      or <see cref="F:System.Runtime.InteropServices.UnmanagedType.LPArray" /> enumeration
      value. When using either of these unmanaged types, either this field or <see cref="F:System.Runtime.InteropServices.MarshalAsAttribute.SizeParamIndex" /> is required.
      </para>
        </remarks>
      </Docs>
      <Excluded>0</Excluded>
    </Member>
    <Member MemberName="SizeParamIndex">
      <MemberSignature Language="ILASM" Value=".field public int16 SizeParamIndex" />
      <MemberSignature Language="C#" Value="public short SizeParamIndex;" />
      <MemberSignature Language="ILAsm" Value=".field public int16 SizeParamIndex" />
      <MemberType>Field</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5000.0</AssemblyVersion>
        <AssemblyVersion>2.0.0.0</AssemblyVersion>
        <AssemblyVersion>4.0.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Int16</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>
          <para>A <see cref="T:System.Int16" /> that identifies the
   position (starting with zero) of the method argument that identifies the size of
   the array being marshaled.</para>
        </summary>
        <remarks>
          <para>This field is used only with the <see cref="F:System.Runtime.InteropServices.UnmanagedType.ByValArray" />
or <see cref="F:System.Runtime.InteropServices.UnmanagedType.LPArray" /> enumeration value.
When using either of these unmanaged types, either this field or <see cref="F:System.Runtime.InteropServices.MarshalAsAttribute.SizeConst" /> is required. </para>
        </remarks>
      </Docs>
      <Excluded>0</Excluded>
    </Member>
    <Member MemberName="Value">
      <MemberSignature Language="ILASM" Value=".property valuetype System.Runtime.InteropServices.UnmanagedType Value { public hidebysig specialname instance valuetype System.Runtime.InteropServices.UnmanagedType get_Value() }" />
      <MemberSignature Language="C#" Value="public System.Runtime.InteropServices.UnmanagedType Value { get; }" />
      <MemberSignature Language="ILAsm" Value=".property instance valuetype System.Runtime.InteropServices.UnmanagedType Value" />
      <MemberType>Property</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5000.0</AssemblyVersion>
        <AssemblyVersion>2.0.0.0</AssemblyVersion>
        <AssemblyVersion>4.0.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Runtime.InteropServices.UnmanagedType</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>
          <para>Gets the <see cref="T:System.Runtime.InteropServices.UnmanagedType" /> value the data
   is to be marshaled as.</para>
        </summary>
        <value>
          <para> The <see cref="T:System.Runtime.InteropServices.UnmanagedType" /> value indicating how the data is to
   be marshaled. </para>
        </value>
        <remarks>
          <para>This property is read-only.</para>
        </remarks>
      </Docs>
      <Excluded>0</Excluded>
    </Member>
  </Members>
  <TypeExcluded>0</TypeExcluded>
</Type>
