Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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 yang akan 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, menentukan 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 waktu proses. |
| <Rakitan> | Menerapkan kebijakan refleksi ke semua jenis dalam rakitan tertentu. |
| <Pustaka> | Menentukan rakitan yang berisi jenis dan jenis anggota yang metadatanya tersedia untuk refleksi pada waktu proses. |
| <Namespace Layanan> | 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 mengambil alih pengaturan kebijakan yang ditentukan oleh elemen induk.
<Type> Elemen dari jenis generik menerapkan kebijakannya ke semua instansiasi yang tidak memiliki kebijakan mereka sendiri. Kebijakan jenis generik yang dibangun didefinisikan oleh elemen TypeInstantiation>.<
Jika jenisnya adalah jenis generik, namanya dihiasi oleh simbol aksen kubur (') 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 contoh hanya mengambil informasi jenis, ketersediaan metadata dikontrol 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, contoh gagal menampilkan informasi anggota yang diminta pada waktu proses. 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 waktu proses 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>