<Subtypes> 項目 (.NET Native)
將執行階段原則套用至從包含類型繼承的所有類別。
語法
<Subtypes 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" />
屬性和項目
下列章節說明屬性、子元素和父元素。
屬性
屬性 | 屬性類型 | 描述 |
---|---|---|
Activate |
反映 | 選用屬性。 控制建構函式的執行階段存取,以便啟動執行個體。 |
Browse |
反映 | 選用屬性。 控制程式項目相關資訊的查詢,但不會啟用任何執行階段存取。 |
Dynamic |
反映 | 選用屬性。 控制對所有類型成員 (包括建構函式、方法、欄位、屬性和事件) 的執行階段存取,以啟用動態程式設計。 |
Serialize |
序列化 | 選用屬性。 控制建構函式、欄位和屬性的執行階段存取,以便 Newtonsoft JSON 序列化程式等程式庫可對類型執行個體進行序列化和還原序列化。 |
DataContractSerializer |
序列化 | 選用屬性。 控制使用 System.Runtime.Serialization.DataContractSerializer 類別的序列化原則。 |
DataContractJsonSerializer |
序列化 | 選用屬性。 控制使用 System.Runtime.Serialization.Json.DataContractJsonSerializer 類別的 JSON 序列化原則。 |
XmlSerializer |
序列化 | 選用屬性。 控制使用 System.Xml.Serialization.XmlSerializer 類別的 XML 序列化原則。 |
MarshalObject |
Interop | 選用屬性。 控制 Windows 執行階段和 COM 之參考類型的封送處理原則。 |
MarshalDelegate |
Interop | 選用屬性。 控制將委派類型當作函式指標封送處理至機器碼的原則。 |
MarshalStructure |
Interop | 選用屬性。 控制將值類型封送處理為原生程式碼的原則。 |
所有屬性
值 | Description |
---|---|
policy_setting | 要套用到此原則類型的設定。 可能的值為 All 、Auto 、Excluded 、Public 、PublicAndInternal 、Required Public 、Required PublicAndInternal 和 Required All 。 如需詳細資訊,請參閱執行階段指示詞原則設定。 |
子元素
無。
父項目
元素 | 描述 |
---|---|
<類型> | 將反映原則套用至類型及其所有成員。 |
備註
<Subtypes>
元素將原則套用至其包含類型的所有子類型。 當您想將不同的原則套用至衍生類型及其基底類別時,可使用這個元素。
反映、序列化和 interop 屬性都是選用性,但至少要有一個屬性存在。
範例
下列範例定義名為 BaseClass
的類別和名為 Derived1
的子類別。
namespace Examples.Libraries
{
public class BaseClass
{
public BaseClass()
{ }
public override string ToString()
{
return String.Format("{0} Version {1}", this.GetType().Name, Version);
}
public virtual double Version
{ get { return 1.0; }}
}
public class Derived1 : BaseClass
{
public Derived1() : base()
{}
public override double Version
{ get { return 1.1; }}
public override string ToString()
{
return String.Format("{0} Version {1}", this.GetType().Name, Version);
}
}
}
如下列程式碼所示,執行階段指示詞檔案將 Dynamic
的 Activate
和 BaseClass
原則明確設定為 Excluded
。 因此,您無法以動態方式或透過呼叫 BaseClass
類別建構函式,來具現化 BaseClass
類型的物件。 不過,<Subtypes>
元素可以動態方式及透過呼叫其類別建構函式,來具現化衍生自 BaseClass
的類別。
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
<Application>
<Assembly Name="*Application*" Dynamic="Required All" />
<Type Name="Examples.Libraries.BaseClass" Activate ="Excluded" Dynamic="Excluded" >
<Subtypes Activate="Public" Dynamic ="Public"/>
</Type>
</Application>
</Directives>
由於 <Subtypes>
指示詞,呼叫 Derived1
方法以動態具現化 Activator.CreateInstance(Type) 執行個體的下列程式碼會順利執行。 此處的區塊變數是空白 UWP 應用程式中的 TextBlock 物件。
namespace Examples
{
using System.Reflection;
using Examples.Libraries;
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
Derived1 d1 = new Derived1();
block.Text += d1.ToString() + Environment.NewLine;
Type derivedType = typeof(Derived1);
Object obj = Activator.CreateInstance(derivedType);
block.Text += obj.GetType().FullName + Environment.NewLine;
}
}
}