<Elemen Type> (.NET Native)

Menerapkan kebijakan runtime ke jenis tertentu, seperti kelas atau struktur.

Sintaks

<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" />

Atribut dan Elemen

Bagian berikut menjelaskan atribut, elemen turunan, dan elemen induk.

Atribut

Atribut Jenis atribut Deskripsi
Name Umum Atribut yang diperlukan. Menentukan nama jenis.
Activate Refleksi Atribut opsional. Mengontrol akses runtime ke konstruktor untuk mengaktifkan aktivasi instans.
Browse Refleksi Atribut opsional. Mengontrol kueri untuk informasi tentang elemen program, tetapi tidak mengaktifkan akses runtime apa pun.
Dynamic Refleksi Atribut opsional. Mengontrol akses runtime ke semua anggota jenis, termasuk konstruktor, metode, bidang, properti, dan peristiwa, untuk mengaktifkan pemrograman dinamis.
Serialize Serialisasi Atribut opsional. Mengontrol akses runtime ke konstruktor, bidang, dan properti, untuk memungkinkan instans jenis diserialisasikan dan dideserialisasi oleh pustaka seperti serializer Newtonsoft JSON.
DataContractSerializer Serialisasi Atribut opsional. Mengontrol kebijakan untuk serialisasi yang menggunakan System.Runtime.Serialization.DataContractSerializer kelas .
DataContractJsonSerializer Serialisasi Atribut opsional. Mengontrol kebijakan untuk serialisasi JSON yang menggunakan System.Runtime.Serialization.Json.DataContractJsonSerializer kelas .
XmlSerializer Serialisasi Atribut opsional. Mengontrol kebijakan untuk serialisasi XML yang menggunakan System.Xml.Serialization.XmlSerializer kelas .
MarshalObject Interop Atribut opsional. Mengontrol kebijakan untuk marshaling jenis referensi ke Windows Runtime dan COM.
MarshalDelegate Interop Atribut opsional. Mengontrol kebijakan untuk marshaling mendelegasikan jenis sebagai penunjuk fungsi ke kode asli.
MarshalStructure Interop Atribut opsional. Mengontrol kebijakan untuk marshaling jenis nilai ke kode asli.

Atribut nama

Nilai Deskripsi
type_name Nama jenis. Jika elemen ini <Type> adalah turunan dari <elemen Namespace> atau elemen lain <Type> , type_name dapat menyertakan nama jenis tanpa namespace layanannya. Jika tidak, type_name harus menyertakan nama jenis yang sepenuhnya memenuhi syarat.

Semua atribut lainnya

Nilai Deskripsi
policy_setting Pengaturan untuk diterapkan ke jenis kebijakan ini. Nilai yang mungkin adalah All, , ExcludedAuto, Public, PublicAndInternal, Required Public, Required PublicAndInternal, dan Required All. Untuk informasi selengkapnya, lihat Pengaturan Kebijakan Arahan Runtime.

Elemen Anak

Elemen Deskripsi
<AttributeImplies> Jika jenis yang berisi adalah atribut , tentukan kebijakan runtime untuk elemen kode tempat atribut diterapkan.
<Kejadian> Menerapkan kebijakan refleksi ke peristiwa milik jenis ini.
<Bidang> Menerapkan kebijakan refleksi ke bidang milik jenis ini.
<GenericParameter> Menerapkan kebijakan ke jenis parameter jenis generik.
<ImpliesType> Menerapkan kebijakan ke jenis, jika kebijakan tersebut telah diterapkan ke jenis yang diwakili oleh elemen yang berisi <Type> .
<Metode> Menerapkan kebijakan refleksi ke metode milik jenis ini.
<MethodInstantiation> Menerapkan kebijakan refleksi ke metode generik yang dibangun milik jenis ini.
<Properti> Menerapkan kebijakan refleksi ke properti milik jenis ini.
<Subtipe> Menerapkan kebijakan runtime ke semua kelas yang diwarisi dari jenis yang berisi.
<Type> Menerapkan kebijakan refleksi ke jenis berlapis.
<TypeInstantiation> Menerapkan kebijakan refleksi ke jenis generik yang dibangun.

Elemen Induk

Elemen Deskripsi
<Aplikasi> Berfungsi sebagai kontainer untuk jenis dan jenis anggota di seluruh aplikasi yang metadatanya tersedia untuk refleksi pada durasi.
<Rakitan> Menerapkan kebijakan refleksi ke semua jenis dalam rakitan tertentu.
<Perpustakaan> Menentukan rakitan yang berisi jenis dan jenis anggota yang metadatanya tersedia untuk refleksi pada durasi.
<Namespace> Menerapkan kebijakan refleksi ke semua jenis dalam namespace layanan.
<Type> Menerapkan kebijakan refleksi ke jenis dan semua anggotanya.
<TypeInstantiation> Menerapkan kebijakan refleksi ke jenis generik yang dibangun dan semua anggotanya.

Keterangan

Semua atribut refleksi, serialisasi, dan interop bersifat opsional. Jika tidak ada, <Type> elemen berfungsi sebagai kontainer yang jenis anaknya menentukan kebijakan untuk masing-masing anggota.

<Type> Jika elemen adalah turunan dari <elemen Assembly>, <Namespace>, <Type>, atau <TypeInstantiation>, elemen tersebut akan mengambil alih pengaturan kebijakan yang ditentukan oleh elemen induk.

<Type> Elemen jenis generik menerapkan kebijakannya ke semua instansiasi yang tidak memiliki kebijakan sendiri. Kebijakan jenis generik yang dibangun ditentukan oleh <elemen TypeInstantiation> .

Jika jenisnya adalah jenis generik, namanya dihiasi oleh simbol aksen kuburan (') diikuti dengan jumlah parameter generiknya. Misalnya, Name atribut elemen untuk System.Collections.Generic.List<T> kelas muncul sebagai Name="System.Collections.Generic.List`1"<Type> .

Contoh 1

Contoh berikut menggunakan pantulan untuk menampilkan informasi tentang bidang, properti, dan metode System.Collections.Generic.List<T> kelas. Variabel b dalam contoh adalah TextBlock kontrol. Karena contohnya hanya mengambil informasi jenis, ketersediaan metadata dikendalikan oleh Browse pengaturan kebijakan.

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;
}

Karena metadata untuk List<T> kelas tidak secara otomatis disertakan oleh rantai alat .NET Native, contohnya gagal menampilkan informasi anggota yang diminta pada durasi. Untuk menyediakan metadata yang diperlukan, tambahkan elemen berikut <Type> ke file arahan runtime. Perhatikan bahwa, karena kami telah menyediakan elemen Namespace> induk<, kami tidak perlu memberikan nama jenis yang sepenuhnya memenuhi syarat dalam <Type> elemen .

<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>

Contoh 2

Contoh berikut menggunakan pantulan untuk mengambil PropertyInfo objek yang mewakili String.Chars[] properti . Kemudian menggunakan PropertyInfo.GetValue(Object, Object[]) metode untuk mengambil nilai karakter ketujuh dalam string, dan untuk menampilkan semua karakter dalam string. Variabel b dalam contoh adalah TextBlock kontrol.

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

Karena metadata untuk String objek tidak tersedia, panggilan ke PropertyInfo.GetValue(Object, Object[]) metode melempar NullReferenceException pengecualian pada durasi saat dikompilasi dengan rantai alat .NET Native. Untuk menghilangkan pengecualian dan memberikan metadata yang diperlukan, tambahkan elemen berikut <Type> ke file arahan 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>

Lihat juga