Sommario:
- Definizione - Cosa significano gli attributi direzionali?
- Techopedia spiega gli attributi direzionali
Definizione - Cosa significano gli attributi direzionali?
Gli attributi direzionali, in C #, sono tag usati per specificare i parametri del metodo oggetto con informazioni relative al flusso direzionale di dati tra il chiamante e il chiamante.
Gli attributi direzionali controllano il marshalling - dove un oggetto è preparato per il trasferimento attraverso un'applicazione o il limite del processo - della direzione del parametro del metodo e dei valori di ritorno. Gli attributi direzionali vengono applicati per modificare il marshalling di runtime durante la comunicazione del codice gestito, che viene eseguito da Common Language Runtime (CLR), e del codice non gestito, che viene eseguito al di fuori del controllo del CLR.
Techopedia spiega gli attributi direzionali
InAttribute e OutAttribute sono i due attributi direzionali C # utilizzati per mappare gli attributi IDL (Interface Definition Language) del componente oggetto modello (COM). InAttribute mappa a, e OutAttribute mappa a. La firma del metodo gestito restituisce il valore in una libreria dei tipi. È essenziale specificare l'attributo direzionale corretto per i parametri del metodo, in modo che la libreria dei tipi di esportazione imposti correttamente i bit In / Out.
Applicando InAttribute e OutAttribute in array e tipi formattati di non Blittable (che non hanno una rappresentazione di memoria gestita e non gestita comune), il chiamante vede cambiamenti di chiamata. Gli attributi direzionali applicati a questi tipi riducono le copie non necessarie durante il marshalling.
In C #, InAttribute e OutAttribute sono utilizzati in tre forme con due parole chiave durante la comunicazione tra chiamante e chiamata, come segue:
- "out" - Implica
- "ref" - Implica,
- (Nessuno specificato) - (per impostazione predefinita)
Le parole chiave out e ref sono utilizzate per tipi di valore e tipi di riferimento serializzabili. La parola chiave ref implica che il parametro è eseguito il marshalling in entrambe le direzioni e out implica il trasferimento dei dati del chiamante. Quando ref o out non vengono utilizzati, ciò implica che i dati vengano trasferiti alla chiamata.
Ad esempio, un'applicazione client .NET invia un valore di input a un metodo del componente COM, che calcola il risultato del valore di input e restituisce il risultato al client. Gli attributi direzionali possono essere applicati ai parametri del metodo che serve la richiesta indicando il tipo di marshalling richiesto per valore di input e risultato.
Gli attributi direzionali hanno le seguenti caratteristiche:
- Opzionale e applicato ai parametri del metodo in fase di progettazione
- Supportato solo per interoperabilità COM e invocazione piattaforma
- InAttribute non può essere applicato a un parametro con una parola chiave out
Il marshaller di interoperabilità CLR fornisce il servizio di marshalling in fase di esecuzione gestendo gli argomenti di chiamata del metodo e restituendo valori tra memoria gestita e non gestita. Se gli attributi direzionali non sono definiti, il marshaler determina il flusso direzionale in base al tipo di parametro e al modificatore (se presenti). Il marshaler opera nel modo seguente:
- Non sovrascrive i dati passati come parametro "In" dal codice non gestito. Pertanto, solo i dati di sola lettura, come i dati a cui si accede contemporaneamente, possono essere passati.
- Durante il passaggio di oggetti - come stringhe di base o binarie (BSTR) - con allocazione di memoria stabilita, la sequenza di allocazione / deallocazione corretta viene seguita in base alle impostazioni In / Out.