<하위 형식> 요소(.NET 네이티브)
포함 형식에서 상속된 모든 클래스에 런타임 정책을 적용합니다.
구문
<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 | 선택적 특성입니다. 값 형식을 네이티브 코드로 마샬링하는 정책을 제어합니다. |
모든 특성
값 | 설명 |
---|---|
policy_setting | 이 정책 형식에 적용할 설정입니다. 가능한 값은 All , Auto , Excluded , Public , PublicAndInternal , Required Public , Required PublicAndInternal 및 Required All 입니다. 자세한 정보는 런타임 지시문 정책 설정을 참조하세요. |
자식 요소
없음
부모 요소
요소 | 설명 |
---|---|
<Type> | 형식 및 모든 해당 멤버에 리플렉션 정책을 적용합니다. |
설명
<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;
}
}
}