共用方式為


<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 要套用到此原則類型的設定。 可能的值為 AllAutoExcludedPublicPublicAndInternalRequired PublicRequired PublicAndInternalRequired 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);
      }
   }
}

如下列程式碼所示,執行階段指示詞檔案將 DynamicActivateBaseClass 原則明確設定為 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;
        }
    }
}

另請參閱