OutAttribute Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Indica que las referencias de los datos se deben calcular desde el destinatario de la llamada al llamador.
public ref class OutAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Parameter, Inherited=false)]
public sealed class OutAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Parameter, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class OutAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Parameter, Inherited=false)>]
type OutAttribute = class
inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Parameter, Inherited=false)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type OutAttribute = class
inherit Attribute
Public NotInheritable Class OutAttribute
Inherits Attribute
- Herencia
- Atributos
Ejemplos
En el ejemplo siguiente se muestra cómo aplicar y InAttributeOutAttribute a un prototipo de invocación de plataforma que pasa una matriz como parámetro. La combinación de atributos direccionales permite al autor de la llamada ver los cambios realizados por el destinatario.
using namespace System;
using namespace System::Runtime::InteropServices;
// Declare a class member for each structure element.
[StructLayout(LayoutKind::Sequential, CharSet = CharSet::Unicode)]
public ref class OpenFileName
{
public:
int structSize;
String^ filter;
String^ file;
// ...
};
private ref class NativeMethods
{
public:
// Declare a managed prototype for the unmanaged function.
[DllImport("Comdlg32.dll", CharSet = CharSet::Unicode)]
static bool GetOpenFileName([In, Out]OpenFileName^ ofn);
};
void main() {}
using System.Runtime.InteropServices;
using System;
// Declare a class member for each structure element.
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public class OpenFileName
{
public int structSize = 0;
public string filter = null;
public string file = null;
// ...
}
internal static class NativeMethods
{
// Declare a managed prototype for the unmanaged function.
[DllImport("Comdlg32.dll", CharSet = CharSet.Unicode)]
internal static extern bool GetOpenFileName([In, Out] OpenFileName ofn);
}
public class MainMethod
{
static void Main()
{ }
}
Imports System.Runtime.InteropServices
' Declare a class member for each structure element.
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Class OpenFileName
Public structSize As Integer = 0
Public filter As String = Nothing
Public file As String = Nothing
' ...
End Class
Friend Class NativeMethods
' Declare managed prototype for the unmanaged function.
Friend Declare Unicode Function GetOpenFileName Lib "Comdlg32.dll" (
<[In](), Out()> ByVal ofn As OpenFileName) As Boolean
End Class
Public Class App
Public Shared Sub Main()
End Sub
End Class
Comentarios
Puede aplicar este atributo a parámetros.
OutAttribute es opcional. El atributo solo se admite para la interoperabilidad COM y la invocación de plataforma. En ausencia de una configuración explícita, el serializador de interoperabilidad asume reglas basadas en el tipo de parámetro, si el parámetro se pasa por referencia o por valor, y si el tipo se puede transferir en bloque de bits o no blittable. Por ejemplo, siempre se supone que la StringBuilder clase es In/Out y se supone que una matriz de cadenas pasadas por valor es In.
El comportamiento de solo salida nunca es un comportamiento de serialización predeterminado para los parámetros. Puede aplicar a los OutAttribute tipos de valor y de referencia pasados por referencia para cambiar el comportamiento de in/out al comportamiento de solo salida, que equivale a usar la out
palabra clave en C#. Por ejemplo, las matrices pasadas por valor, serialadas como parámetros de solo entrada de forma predeterminada, se pueden cambiar a Solo salida. Sin embargo, el comportamiento no siempre proporciona semántica esperada cuando los tipos incluyen todos los elementos o campos que se pueden transferir en bloque porque el serializador de interoperabilidad usa el anclaje. Si no le importa pasar datos al destinatario, las referencias de solo salida pueden proporcionar un mejor rendimiento para los tipos que no se pueden transferir en bloque.
La combinación de y InAttributeOutAttribute es especialmente útil cuando se aplica a matrices y tipos con formato no blittable. Los autores de llamadas ven los cambios que realiza un destinatario en estos tipos solo cuando se aplican ambos atributos. Dado que estos tipos requieren la copia durante la serialización, puede usar InAttribute y OutAttribute para reducir las copias innecesarias.
Para obtener más información sobre el efecto de OutAttribute en el comportamiento de serialización, vea Atributos direccionales.
Constructores
OutAttribute() |
Inicializa una nueva instancia de la clase OutAttribute. |
Propiedades
TypeId |
Cuando se implementa en una clase derivada, obtiene un identificador único para este Attribute. (Heredado de Attribute) |
Métodos
Equals(Object) |
Devuelve un valor que indica si esta instancia es igual que un objeto especificado. (Heredado de Attribute) |
GetHashCode() |
Devuelve el código hash de esta instancia. (Heredado de Attribute) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
IsDefaultAttribute() |
Si se reemplaza en una clase derivada, indica si el valor de esta instancia es el valor predeterminado de la clase derivada. (Heredado de Attribute) |
Match(Object) |
Cuando se invalida en una clase derivada, devuelve un valor que indica si esta instancia es igual a un objeto especificado. (Heredado de Attribute) |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |
Implementaciones de interfaz explícitas
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío. (Heredado de Attribute) |
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Obtiene la información de tipos de un objeto, que puede utilizarse para obtener la información de tipos de una interfaz. (Heredado de Attribute) |
_Attribute.GetTypeInfoCount(UInt32) |
Recupera el número de interfaces de información de tipo que proporciona un objeto (0 ó 1). (Heredado de Attribute) |
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Proporciona acceso a las propiedades y los métodos expuestos por un objeto. (Heredado de Attribute) |