OutAttribute Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Indica che il marshalling dei dati deve essere effettuato dal chiamato al chiamante.
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
- Ereditarietà
- Attributi
Esempio
Nell'esempio seguente viene illustrato come applicare e InAttributeOutAttribute a un prototipo di piattaforma invoke che passa una matrice come parametro. La combinazione di attributi direzionali consente al chiamante di visualizzare le modifiche apportate dal chiamante.
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
Commenti
È possibile applicare questo attributo ai parametri.
È OutAttribute facoltativo. L'attributo è supportato solo per l'interoperabilità COM e l'richiamare la piattaforma. In assenza di impostazioni esplicite, il marshalling dell'interoperabilità presuppone regole in base al tipo di parametro, se il parametro viene passato per riferimento o per valore e se il tipo è blittable o non blittable. Ad esempio, si presuppone che la StringBuilder classe sia sempre In/Out e che una matrice di stringhe passate per valore sia In.
Il comportamento out-only non è mai un comportamento di marshalling predefinito per i parametri. È possibile applicare il OutAttribute valore e i tipi di riferimento passati dal riferimento per modificare il comportamento In/Out al comportamento out-only, equivalente all'uso della out
parola chiave in C#. Ad esempio, le matrici passate per valore, marshallate come parametri solo in-only per impostazione predefinita, possono essere modificate in Out-only. Tuttavia, il comportamento non fornisce sempre la semantica prevista quando i tipi includono elementi o campi blittable perché il marshalling dell'interoperabilità usa l'aggiunta. Se non ci si preoccupa di passare i dati nella chiamata, il marshalling out-only può offrire prestazioni migliori per i tipi non blittable.
La combinazione di InAttribute e OutAttribute è particolarmente utile quando si applicano a matrici e tipi non blittable. I chiamanti visualizzano le modifiche apportate a questi tipi solo quando si applicano entrambi gli attributi. Poiché questi tipi richiedono la copia durante il marshalling, è possibile usare InAttribute e OutAttribute ridurre le copie non necessarie.
Per altre informazioni sull'effetto del comportamento di OutAttribute marshalling, vedere Attributi direzionali.
Costruttori
OutAttribute() |
Inizializza una nuova istanza della classe OutAttribute. |
Proprietà
TypeId |
Quando è implementata in una classe derivata, ottiene un identificatore univoco della classe Attribute. (Ereditato da Attribute) |
Metodi
Equals(Object) |
Restituisce un valore che indica se questa istanza è uguale a un oggetto specificato. (Ereditato da Attribute) |
GetHashCode() |
Restituisce il codice hash per l'istanza. (Ereditato da Attribute) |
GetType() |
Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object) |
IsDefaultAttribute() |
In caso di override in una classe derivata, indica se il valore di questa istanza è il valore predefinito per la classe derivata. (Ereditato da Attribute) |
Match(Object) |
Quando è sottoposto a override in una classe derivata, restituisce un valore che indica se questa istanza equivale a un oggetto specificato. (Ereditato da Attribute) |
MemberwiseClone() |
Crea una copia superficiale dell'oggetto Object corrente. (Ereditato da Object) |
ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |
Implementazioni dell'interfaccia esplicita
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Esegue il mapping di un set di nomi a un set corrispondente di ID dispatch. (Ereditato da Attribute) |
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Recupera le informazioni sul tipo relative a un oggetto, che possono essere usate per ottenere informazioni sul tipo relative a un'interfaccia. (Ereditato da Attribute) |
_Attribute.GetTypeInfoCount(UInt32) |
Recupera il numero delle interfacce di informazioni sul tipo fornite da un oggetto (0 o 1). (Ereditato da Attribute) |
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Fornisce l'accesso a proprietà e metodi esposti da un oggetto. (Ereditato da Attribute) |