Bagikan melalui


<Elemen TypeInstantiation> (.NET Native)

Menerapkan kebijakan refleksi runtime ke jenis generik yang dibangun.

Sintaks

<TypeInstantiation Name="type_name"
                   Arguments="type_arguments"
                   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.
Arguments Umum Atribut yang diperlukan. Menentukan argumen jenis generik. Jika ada beberapa argumen, argumen dipisahkan oleh koma.
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 struktur ke kode asli.

Atribut nama

Nilai Deskripsi
type_name Nama jenis. Jika elemen ini <TypeInstantiation> adalah turunan dari <elemen Namespace> , <elemen Type> , atau elemen lain <TypeInstantiation> , type_name dapat menentukan nama jenis tanpa namespace layanannya. Jika tidak, type_name harus menyertakan nama jenis yang sepenuhnya memenuhi syarat. Nama jenis tidak dihiasi. Misalnya, untuk System.Collections.Generic.List<T> objek, <TypeInstantiation> elemen mungkin muncul sebagai berikut:

\<TypeInstantiation Name=System.Collections.Generic.List Dynamic="Required Public" />

Atribut argumen

Nilai Deskripsi
type_argument Menentukan argumen jenis generik. Jika ada beberapa argumen, argumen dipisahkan oleh koma. Setiap argumen harus terdiri dari nama jenis yang sepenuhnya memenuhi syarat.

Semua atribut lainnya

Nilai Deskripsi
policy_setting Pengaturan yang akan diterapkan ke jenis kebijakan ini untuk jenis generik yang dibangun. 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
<Kejadian> Menerapkan kebijakan refleksi ke peristiwa milik jenis ini.
<Bidang> Menerapkan kebijakan refleksi ke bidang milik jenis ini.
<ImpliesType> Menerapkan kebijakan ke jenis, jika kebijakan tersebut telah diterapkan ke jenis yang diwakili oleh elemen yang berisi <TypeInstantiation> .
<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.
<Jenis> Menerapkan kebijakan refleksi ke jenis berlapis.
<TypeInstantiation> Menerapkan kebijakan refleksi ke jenis generik berlapis 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.
<Jenis> 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. Namun, setidaknya satu harus ada.

<TypeInstantiation> Jika elemen adalah turunan dari <elemen Assembly>, <Namespace>, atau <Type>, elemen akan menggantikan pengaturan kebijakan yang ditentukan oleh elemen induk. <Jika elemen Type> mendefinisikan definisi jenis generik yang sesuai, <TypeInstantiation> elemen akan menggantikan kebijakan refleksi runtime hanya untuk instans dari jenis generik yang dibuat yang ditentukan.

Contoh

Contoh berikut menggunakan pantulan untuk mengambil definisi jenis generik dari objek yang dibangun Dictionary<TKey,TValue> . Ini juga menggunakan refleksi untuk menampilkan informasi tentang Type objek yang mewakili jenis generik yang dibangun dan definisi jenis generik. Variabel b dalam contoh adalah TextBlock kontrol.

   public static void GetGenericInfo()
   {
      // Get the type that represents the generic type definition and
      // display information about it.
      Type generic1 = typeof(Dictionary<,>);
      DisplayGenericType(generic1);

      // Get the type that represents a constructed generic type and its
      // generic type definition.
      Dictionary<string, Example> d1 = new Dictionary<string, Example>();
      Type constructed1 = d1.GetType();
      Type generic2 = constructed1.GetGenericTypeDefinition();

      // Display information for the generic type definition, and
      // for the constructed type Dictionary<String, Example>.
      DisplayGenericType(constructed1);
      DisplayGenericType(generic2);

      // Construct an array of type arguments.
      Type[] typeArgs = { typeof(string), typeof(Example) };
      // Construct the type Dictionary<String, Example>.
      Type constructed2 = generic1.MakeGenericType(typeArgs);

      DisplayGenericType(constructed2);

      object o = Activator.CreateInstance(constructed2);

      b.Text += "\r\nCompare types obtained by different methods:\n";
      b.Text += String.Format("   Are the constructed types equal? {0}\n",
                              (d1.GetType() == constructed2));
      b.Text += String.Format("   Are the generic definitions equal? {0}\n",
                              (generic1 == constructed2.GetGenericTypeDefinition()));

      // Demonstrate the DisplayGenericType and
      // DisplayGenericParameter methods with the Test class
      // defined above. This shows base, interface, and special
      // constraints.
      DisplayGenericType(typeof(TestGeneric<>));
   }

   // Display information about a generic type.
   private static void DisplayGenericType(Type t)
   {
      b.Text += String.Format("\n{0}\n", t);
      b.Text += String.Format("   Generic type? {0}\n",
                              t.GetTypeInfo().GenericTypeParameters.Length !=
                              t.GenericTypeArguments.Length);
      b.Text += String.Format("   Generic type definition? {0}\n",
                              ! t.IsConstructedGenericType);

      // Get the generic type parameters.
      Type[] typeParameters = t.GetTypeInfo().GenericTypeParameters;
      if (typeParameters.Length > 0)
      {
         b.Text += String.Format("   {0} type parameters:\n",
                                 typeParameters.Length);
         foreach (Type tParam in typeParameters)
            b.Text += String.Format("      Type parameter: {0} position {1}\n",
                     tParam.Name, tParam.GenericParameterPosition);
      }
      else
      {
         Type[] typeArgs = t.GenericTypeArguments;
         b.Text += String.Format("   {0} type arguments:\n",
                                 typeArgs.Length);
         foreach (var tArg in typeArgs)
               b.Text += String.Format("      Type argument: {0}\n",
                                       tArg);
      }
      b.Text += "\n-------------------------------\n";
   }
}

public interface ITestInterface { }

public class TestBase { }

public class TestGeneric<T> where T : TestBase, ITestInterface, new() { }

public class TestArgument : TestBase, ITestInterface
{
   public TestArgument()
   { }
}

Setelah kompilasi dengan rantai alat .NET Native, contohnya melempar pengecualian MissingMetadataException pada baris yang memanggil Type.GetGenericTypeDefinition metode . Anda dapat menghilangkan pengecualian dan memberikan metadata yang diperlukan dengan menambahkan elemen berikut <TypeInstantiation> ke file arahan runtime:

<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
  <Application>
    <Assembly Name="*Application*" Dynamic="Required All" />
     <TypeInstantiation Name="System.Collections.Generic.Dictionary"
                        Arguments="System.String,GenericType.Example"
                        Dynamic="Required Public" />
  </Application>
</Directives>

Lihat juga