<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 | 要套用到此原則類型的設定。 可能的值為 All 、Auto 、Excluded 、Public 、PublicAndInternal 、Required Public 、Required PublicAndInternal 和 Required 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>