<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 , , Excluded Auto , 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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk