<Elemento Type (.NET Native)>
Aplica a política de runtime a um tipo específico, como uma classe ou estrutura.
Syntax
<Type 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" />
Atributos e elementos
As seções a seguir descrevem atributos, elementos filho e elementos pai.
Atributos
Atributo | Tipo de atributo | Descrição |
---|---|---|
Name |
Geral | Atributo obrigatório. Especifica o nome do tipo. |
Activate |
Reflexão | Atributo opcional . Controla o acesso de runtime a construtores para habilitar a ativação de instâncias. |
Browse |
Reflexão | Atributo opcional . Controla a consulta para obter informações sobre elementos do programa, mas não permite qualquer acesso de runtime. |
Dynamic |
Reflexão | Atributo opcional . Controla o acesso a todos os tipos de membro ao runtime, incluindo construtores, métodos, campos, propriedades e eventos, habilitando a programação dinâmica. |
Serialize |
Serialização | Atributo opcional . Controla o acesso ao runtime para construtores, campos e propriedades para habilitar a serialização e desserialização das instâncias por bibliotecas como o serializador Newtonsoft JSON. |
DataContractSerializer |
Serialização | Atributo opcional . Controla a política de serialização que usa a classe System.Runtime.Serialization.DataContractSerializer. |
DataContractJsonSerializer |
Serialização | Atributo opcional . Controla a política de serialização JSON que usa a classe System.Runtime.Serialization.Json.DataContractJsonSerializer. |
XmlSerializer |
Serialização | Atributo opcional . Controla a política de serialização XML que usa a classe System.Xml.Serialization.XmlSerializer. |
MarshalObject |
Interoperabilidade | Atributo opcional . Política de controles de marshaling de tipos de referência para o Windows Runtime e COM. |
MarshalDelegate |
Interoperabilidade | Atributo opcional . Controla a diretiva de marshaling de tipos delegados como ponteiros de função para código nativo. |
MarshalStructure |
Interoperabilidade | Atributo opcional . Controla a política de marshaling de tipos de valor para código nativo. |
Atributo de nome
Valor | Descrição |
---|---|
type_name | O nome do tipo. Se esse <Type> elemento for filho de um <elemento Namespace> ou de outro <Type> elemento, type_name poderá incluir o nome do tipo sem seu namespace. Caso contrário, o type_name deverá incluir o nome do tipo totalmente qualificado. |
Todos os outros atributos
Valor | Descrição |
---|---|
policy_setting | A configuração a ser aplicada a este tipo de política. Os valores possíveis são All , Auto , Excluded , Public , PublicAndInternal , Required Public , Required PublicAndInternal e Required All . Para obter mais informações, consulte Configurações da política da diretiva de runtime. |
Elementos filho
Elemento | Descrição |
---|---|
<AtributoImplica> | Se o tipo recipiente for um atributo, ele define a política de runtime para elementos de código à qual o atributo é aplicado. |
<Evento> | Aplica a política de reflexão a um evento pertencente a esse tipo. |
<Campo> | Aplica a política de reflexão a um campo pertencente a esse tipo. |
<Parâmetro genérico> | Aplica a política ao tipo de parâmetro de um tipo genérico. |
<ImpliesType> | Aplica a política a um tipo, se esta política tiver sido aplicada ao tipo representado pelo elemento <Type> recipiente. |
<Método> | Aplica a política de reflexão a um método pertencente a esse tipo. |
<MethodInstantiation> | Aplica a política de reflexão a um método construído genérico pertencente a esse tipo. |
<Propriedade> | Aplica a política de reflexão a uma propriedade pertencente a esse tipo. |
<Subtipos> | Aplica a política de runtime a todas as classes herdadas do tipo recipiente. |
<Type> |
Aplica a política de reflexão a um tipo aninhado. |
<TypeInstantiation> | Aplica a política de reflexão a um tipo genérico construído. |
Elementos pai
Elemento | Descrição |
---|---|
<Aplicativo> | Serve como um contêiner para os tipos amplos de aplicativos cujos metadados estão disponíveis para reflexão no tempo de execução. |
<Assembly> | Aplica a política de reflexão para todos os tipos em um assembly especificado. |
<Biblioteca> | Define o assembly que contém tipos e membros de tipo cujos metadados estão disponíveis para reflexão em tempo de execução. |
<Namespace> | Aplica a política de reflexão a todos os tipos em um namespace. |
<Type> |
Aplica a política de reflexão a um tipo e todos os seus membros. |
<TypeInstantiation> | Aplica a política de reflexão a um tipo genérico construído e todos os seus membros. |
Comentários
Os atributos de reflexão, serialização e interoperabilidade são todos opcionais. Se nenhum estiver presente, o elemento <Type>
serve como um contêiner cujos tipos filho definem a política de membros individuais.
Se um <Type>
elemento for filho de um <elemento Assembly>,<<Type>
Namespace> ou< TypeInstantiation>, ele substituirá as configurações de política definidas pelo elemento pai.
Um elemento <Type>
de um tipo genérico aplica sua política a todas as instanciações que não possuem sua própria política. A política de tipos genéricos construídos é definida pelo <elemento TypeInstantiation> .
Se o tipo for um tipo genérico, seu nome será decorado por um símbolo de acento grave (') seguido por seu número de parâmetros genéricos. Por exemplo, o atributo Name
de um elemento <Type>
da classe System.Collections.Generic.List<T> aparece como Name="System.Collections.Generic.List`1"
.
Exemplo 1
O exemplo a seguir usa a reflexão para exibir informações sobre os campos, propriedades e métodos da classe System.Collections.Generic.List<T>. A variável b
no exemplo é um TextBlock controle. Como o exemplo simplesmente recupera informações sobre o tipo, a disponibilidade de metadados é controlada pela configuração da política Browse
.
public static void GetReflectionInfo()
{
Type t = typeof(List<>);
b.Text += String.Format("Type information for {0}\n", t);
// Get fields.
b.Text += "\nFields:\n";
var fields = t.GetTypeInfo().DeclaredFields;
int nFields = 0;
foreach (var field in fields)
{
b.Text += String.Format(" {0} ({1})", field.Name, field.FieldType.Name);
nFields++;
}
if (nFields == 0) b.Text += " None\n";
// Get properties.
b.Text += "\nProperties:\n";
var props = t.GetTypeInfo().DeclaredProperties;
int nProps = 0;
foreach (var prop in props)
{
b.Text += String.Format(" {0} ({1})\n", prop.Name, prop.PropertyType.Name);
nProps++;
}
if (nProps == 0) b.Text += " None\n";
// Get methods.
b.Text += "\nMethods:\n";
var methods = t.GetTypeInfo().DeclaredMethods;
int nMethods = 0;
foreach (var method in methods)
{
if (method.IsSpecialName) continue;
b.Text += String.Format(" {0}({1}) ({2})\n", method.Name,
GetSignature(method), method.ReturnType.Name);
nMethods++;
}
if (nMethods == 0) b.Text += " None\n";
}
private static string GetSignature(MethodInfo m)
{
string signature = null;
var parameters = m.GetParameters();
for (int ctr = 0; ctr < parameters.Length; ctr++)
{
signature += String.Format("{0} {1}", parameters[ctr].ParameterType.Name,
parameters[ctr].Name);
if (ctr < parameters.Length - 1) signature += ", ";
}
return signature;
}
Como os metadados da List<T> classe não são incluídos automaticamente pela cadeia de ferramentas do .NET Native, o exemplo não exibe as informações de membro solicitadas em tempo de execução. Para fornecer os metadados necessários, adicione o seguinte elemento <Type>
ao arquivo de diretivas de runtime. Observe que, como fornecemos um elemento Namespace> pai<, não precisamos fornecer um nome de tipo totalmente qualificado no <Type>
elemento.
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
<Application>
<Assembly Name="*Application*" Dynamic="Required All" />
<Namespace Name ="System.Collections.Generic" >
<Type Name="List`1" Browse="Required All" />
</Namespace>
</Application>
</Directives>
Exemplo 2
O exemplo a seguir usa reflexão para recuperar um objeto PropertyInfo que representa a propriedade String.Chars[]. Ele usa o método PropertyInfo.GetValue(Object, Object[]) para recuperar o valor do sétimo caractere de uma cadeia de caracteres e exibir todos os caracteres na cadeia de caracteres. A variável b
no exemplo é um TextBlock controle.
public void Example()
{
string test = "abcdefghijklmnopqrstuvwxyz";
// Get a PropertyInfo object.
TypeInfo ti = typeof(string).GetTypeInfo();
PropertyInfo pinfo = ti.GetDeclaredProperty("Chars");
// Show the seventh letter ('g')
object[] indexArgs = { 6 };
object value = pinfo.GetValue(test, indexArgs);
b.Text += String.Format("Character at position {0}: {1}\n", indexArgs[0], value);
// Show the complete string.
b.Text += "\nThe complete string:\n";
for (int x = 0; x < test.Length; x++)
{
b.Text += pinfo.GetValue(test, new Object[] {x}).ToString() + " ";
}
}
// The example displays the following output:
// Character at position 6: g
//
// The complete string:
// a b c d e f g h i j k l m n o p q r s t u v w x y z
Como os metadados do String objeto não estão disponíveis, a chamada para o PropertyInfo.GetValue(Object, Object[]) método gera uma NullReferenceException exceção em tempo de execução quando compilada com a cadeia de ferramentas do .NET Native. Para eliminar a exceção e fornecer os metadados necessários, adicione o seguinte elemento <Type>
ao arquivo de diretivas de runtime:
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
<Application>
<Assembly Name="*Application*" Dynamic="Required All" />
<Type Name="System.String" Dynamic="Required Public"/> -->
</Application>
</Directives>