共用方式為


<ImpliesType> 項目 (.NET Native)

如果原則已套用至包含類型或方法,則會將該原則套用至類型。

語法

<ImpliesType 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" />

屬性和項目

下列章節說明屬性、子元素和父元素。

屬性

屬性 屬性類型 描述
Name 一般 必要的 屬性。 指定類型名稱。
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 選用屬性。 控制將值類型封送處理為原生程式碼的原則。

Name 屬性

Description
type_name 類型名稱。 如果這個 <ImpliesType> 項目所表示的類型位在與其包含 <Type> 項目相同的命名空間中,則 type_name 可以包含該類型的名稱,而不包含其命名空間。 否則,type_name 必須包含完整的類型名稱。

所有其他屬性

Description
policy_setting 要套用到此原則類型的設定。 可能的值為 AllAutoExcludedPublicPublicAndInternalRequired PublicRequired PublicAndInternalRequired All。 如需詳細資訊,請參閱執行階段指示詞原則設定

子元素

無。

父項目

元素 描述
<類型> 將反映原則套用至類型及其所有成員。
<TypeInstantiation> 將反映原則套用至建構泛型類型及其所有成員。
<方法> 將反映原則套用至方法。

備註

<ImpliesType> 元素的主要目的是要供程式庫使用。 它可以解決下列情況:

  • 如果常式需要反映在一個類型上,則一定需要反映在第二個類型上。

  • 否則,無法將中繼資料用於第二個類型的隱含具現化,因為靜態分析並未指出中繼資料是必要的。

大多數情況下,這兩個類型是含有共用型別引數的泛型具現化。

<ImpliesType> 元素的定義是假設如果需要反映在其父元素指定的類型上,則表示需要反映在 <ImpliesType> 元素所指定的類型上。 例如,下列反映指示詞套用至 Explicit<T>Implicit<T> 這兩種類型。

<Type Name="Explicit{ET}">
    <ImpliesType Name="Implicit{ET}" Dynamic="Required Public" />
</Type>

除非 Explicit 的具現化具有已定義的 Dynamic 原則設定,否則這個指示詞沒有任何作用。 例如,如果 Explicit<Int32> 是這種情形,則會以其公用成員為基礎來將 Implicit<Int32> 具現化,並使其中繼資料可供存取來進行動態程式設計。

下列是套用到至少一個序列化程式的真實世界範例。 指示詞擷取到下列需求:反映在輸入為 IList<something> 的某個項目上,也需要反映在相對應的 List<something> 類型上,但不需要任何個別應用程式註釋。

<Type Name="System.Collections.Generic.IList{T}">
   <ImpliesType Name="System.Collections.Generic.List{T}" Serialize="Public" />
</Type>

<ImpliesType> 元素也會出現在 <Method> 元素中,因為在某些情況下,具現化泛型方法表示要反映在類型具現化上。 例如,想像一個給定程式庫將會隨著相關聯的 List<T>Array 類型動態存取的泛型方法 IEnumerable<T> MakeEnumerable<T>(string spelling, T defaultValue)。 這可以表示成:

<Type Name="MyType">
    <Method Name="MakeEnumerable{T}" Signature="(System.String, T)" Dynamic="Included">
        <ImpliesType Name="T[]" Dynamic="Public" />
        <ImpliesType Name="System.Collections.Generic.List{T}" Dynamic="Public" />
    </Method>
</Type>

另請參閱