<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 , , Excluded Auto , 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
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