<Elemento ImpliesType> (.NET Native)

Applica criteri a un tipo, se tale criterio è stato applicato al metodo o al tipo contenitore.

Sintassi

<ImpliesType Name="type_name"
             Activate="policy_type"
             Browse="policy_type"
             Dynamic="policy_type"
             Serialize="policy_type"
             DataContractSerializer="policy_setting"
             DataContractJsonSerializer="policy_setting"
             XmlSerializer="policy_setting"
             MarshalObject="policy_setting"
             MarshalDelegate="policy_setting"
             MarshalStructure="policy_setting" />

Attributi ed elementi

Nelle sezioni seguenti vengono descritti gli attributi, gli elementi figlio e gli elementi padre.

Attributi

Attributo Tipo di attributo Descrizione
Name Generali Attributo obbligatorio. Specifica il nome tipo.
Activate Reflection Attributo facoltativo. Controlla l'accesso in fase di esecuzione ai costruttori per abilitare l'attivazione di istanze.
Browse Reflection Attributo facoltativo. Controlla le query per le informazioni sugli elementi di programma, ma non abilita l'accesso in fase di esecuzione.
Dynamic Reflection Attributo facoltativo. Controlla l'accesso in fase di esecuzione a tutti i membri dei tipi, inclusi costruttori, metodi, campi, proprietà ed eventi, per abilitare la programmazione dinamica.
Serialize Serializzazione Attributo facoltativo. Controlla l'accesso in fase di esecuzione a costruttori, campi e proprietà per abilitare la serializzazione e la deserializzazione delle istanze del tipo da parte di librerie quali il serializzatore JSON di Newtonsoft.
DataContractSerializer Serializzazione Attributo facoltativo. Controlla i criteri per la serializzazione che usano la classe System.Runtime.Serialization.DataContractSerializer.
DataContractJsonSerializer Serializzazione Attributo facoltativo. Controlla i criteri per la serializzazione JSON che usano la classe System.Runtime.Serialization.Json.DataContractJsonSerializer.
XmlSerializer Serializzazione Attributo facoltativo. Controlla i criteri per la serializzazione XML che usano la classe System.Xml.Serialization.XmlSerializer.
MarshalObject Interop Attributo facoltativo. Controlla i criteri per effettuare il marshalling dei tipi di riferimento a Windows Runtime e COM.
MarshalDelegate Interop Attributo facoltativo. Controlla i criteri per effettuare il marshalling dei tipi delegati come puntatori a funzioni al codice nativo.
MarshalStructure Interop Attributo facoltativo. Controlla i criteri per il marshalling dei tipi di valore al codice nativo.

Name (attributo)

valore Descrizione
type_name Nome del tipo. Se il tipo rappresentato da questo elemento <ImpliesType> si trova nello stesso spazio dei nomi dell'elemento <Type> contenitore, type_name può includere il nome del tipo senza lo spazio dei nomi. In caso contrario, type_name deve includere il nome completo del tipo.

Tutti gli altri attributi

valore Descrizione
policy_setting L'impostazione da applicare a questo tipo di criteri. I valori consentiti sono All, Auto, Excluded, Public, PublicAndInternal, Required Public, Required PublicAndInternal e Required All. Per altre informazioni, vedere Runtime Directive Policy Settings (Impostazioni dei criteri delle direttive di runtime).

Elementi figlio

Nessuno.

Elementi padre

Elemento Descrizione
<Tipo> Applica i criteri di reflection a un tipo e a tutti i membri.
<TypeInstantiation> Applica i criteri di reflection a un tipo generico costruito e a tutti i membri.
<Metodo> Applica i criteri di reflection a un metodo.

Osservazioni:

L'elemento <ImpliesType> viene usato principalmente dalle librerie. Consente di risolvere il seguente scenario:

  • Se una routine deve eseguire la reflection su un tipo, deve necessariamente eseguirla anche su un secondo tipo.

  • I metadati per la creazione di istanze implicita del secondo tipo sono altrimenti disponibili, in quanto l'analisi statica non indica che sono necessari.

I due tipi sono, in genere, creazioni di istanze generiche con gli argomenti tipo condiviso.

L'elemento <ImpliesType> è stato definito partendo dal presupposto che la necessità di reflection sul tipo specificato dal relativo elemento padre comporta la necessità della reflection sul tipo specificato dall'elemento <ImpliesType>. Ad esempio, le seguenti direttive di reflection si applicano a due tipi: Explicit<T> e Implicit<T>.

<Type Name="Explicit{ET}">
    <ImpliesType Name="Implicit{ET}" Dynamic="Required Public" />
</Type>

Questa direttiva non ha alcun effetto a meno che non sia stata definita un'impostazione di criteri Explicit per un'istanza di Dynamic. Se, ad esempio, è il caso per Explicit<Int32>, viene creata un'istanza di Implicit<Int32> con membri pubblici che contengono una radice e i relativi metadati vengono resi accessibili per la programmazione dinamica.

Di seguito è riportato un esempio reale che si applica ad almeno un serializzatore. Le direttive acquisiscono il requisito in base al quale la reflection su un elemento tipizzato come IList<elemento> comporta anche la reflection sul tipo List<elemento> corrispondente, senza che siano necessarie annotazioni per ogni applicazione.

<Type Name="System.Collections.Generic.IList{T}">
   <ImpliesType Name="System.Collections.Generic.List{T}" Serialize="Public" />
</Type>

L'elemento <ImpliesType> può anche essere visualizzato all'interno di un elemento <Method>, perché in alcuni casi un'istanza di un metodo generico implica la reflection su un'istanza del tipo. Ad esempio, si supponga un metodo generico IEnumerable<T> MakeEnumerable<T>(string spelling, T defaultValue) al quale una determinata libreria accederà in modo dinamico con i tipi List<T> e Array associati. Questa operazione può essere espressa nel seguente modo:

<Type Name="MyType">
    <Method Name="MakeEnumerable{T}" Signature="(System.String, T)" Dynamic="Included">
        <ImpliesType Name="T[]" Dynamic="Public" />
        <ImpliesType Name="System.Collections.Generic.List{T}" Dynamic="Public" />
    </Method>
</Type>

Vedi anche