<속성> 요소(.NET 네이티브)
런타임 리플렉션 정책을 속성에 적용합니다.
구문
<Property Name="property_name"
Browse="policy_type"
Dynamic="policy_type"
Serialize="policy_type" />
특성 및 요소
다음의 섹션은 특성, 자식 요소 및 부모 요소에 대해 설명합니다.
특성
특성 | 특성 형식 | 설명 |
---|---|---|
Name |
일반 | 필수 특성입니다. 속성 이름을 지정합니다. |
Browse |
리플렉션 | 선택적 특성입니다. 속성에 대한 정보 쿼리 또는 속성 열거는 제어하지만 런타임에 동적 호출을 사용하도록 설정하지는 않습니다. |
Dynamic |
리플렉션 | 선택적 특성입니다. 동적 프로그래밍을 수행할 수 있도록 속성에 대한 런타임 액세스를 제어합니다. 이 정책을 통해 런타임에 속성을 동적으로 설정하거나 검색할 수 있습니다. |
Serialize |
직렬화 | 선택적 특성입니다. Newtonsoft JSON serializer 등의 라이브러리를 통해 형식 인스턴스를 serialize하거나 데이터 바인딩에 사용할 수 있도록 속성에 대한 런타임 액세스를 제어합니다. |
이름 특성
값 | 설명 |
---|---|
method_name | 속성 이름입니다. 속성의 형식은 부모 <Type> 또는 <TypeInstantiation> 요소로 정의됩니다. |
기타 모든 특성
값 | 설명 |
---|---|
policy_setting | 속성에 대해 이 정책 형식에 적용할 설정입니다. 가능한 값은 Auto , Excluded , Included 및 Required 입니다. 자세한 정보는 런타임 지시문 정책 설정을 참조하세요. |
자식 요소
없음
부모 요소
요소 | 설명 |
---|---|
<Type> | 형식 및 모든 해당 멤버에 리플렉션 정책을 적용합니다. |
<TypeInstantiation> | 생성된 제네릭 형식 및 모든 해당 멤버에 리플렉션 정책을 적용합니다. |
설명
속성의 정책이 명시적으로 정의되어 있지 않으면 부모 요소의 런타임 정책을 상속합니다.
예시
다음 예제에서는 리플렉션을 사용하여 Book
개체를 인스턴스화하고 해당 속성 값을 표시합니다. 프로젝트의 원본 default.rd.xml 파일은 다음과 같이 표시됩니다.
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
<Application>
<Namespace Name="LibraryApplications" Browse="Required Public" >
<Type Name="Book" Activate="All" />
</Namespace>
</Application>
</Directives>
이 파일은 All
클래스에 대해 Activate
값을 Book
정책에 적용합니다. 따라서 리플렉션을 통해 클래스 생성자에 액세스할 수 있습니다. Browse
에 대한 Book
정책은 부모 네임스페이스에서 상속됩니다. 이 정책은 런타임에 메타데이터를 사용할 수 있도록 하는 Required Public
으로 설정됩니다.
다음은 예제의 소스 코드입니다. outputBlock
변수는 TextBlock 컨트롤을 나타냅니다.
namespace LibraryApplications
{
public sealed class Example
{
public void Execute()
{
TextBlock outputBlock = MainPage.outputBlock;
Type t = typeof(Book);
Object obj = Activator.CreateInstance(t, new Object[] { "A Tale of 2 Cities", "Charles Dickens", "" });
outputBlock.Text += "\n\n\n";
foreach (var p in t.GetRuntimeProperties())
{
outputBlock.Text += String.Format("{0}: {1}\n", p.Name, p.GetValue(obj));
}
}
}
public class Book
{
private string bookTitle = "";
private string bookAuthor = "";
private string bookISBN = "";
public Book(string title, string author, string isbn)
{
bookTitle = title;
bookAuthor = author;
bookISBN = isbn;
}
public string Title
{
get { return bookTitle; }
set { bookTitle = value; }
}
public string Author
{
get { return bookAuthor; }
set { bookTitle = value; }
}
public string ISBN
{
get { return bookISBN; }
}
public override string ToString()
{
return String.Format("{0}, {1}", Author, Title);
}
}
}
public class TextUtilities
{
public static string ConvertNumberToWord(int value)
{
switch (value)
{
case 1:
return "One";
case 2:
return "Two";
case 3:
return "Three";
case 4:
return "Four";
case 5:
return "Five";
case 6:
return "Six";
case 7:
return "Seven";
case 8:
return "Eight";
case 9:
return "Nine";
default:
return value.ToString();
}
}
}
그러나 이 예제를 컴파일하고 실행하면 MissingRuntimeArtifactException 예외가 throw됩니다. Book
형식에 대해 메타데이터는 제공했지만 속성 getter의 구현은 동적으로 제공하지 못했기 때문입니다. 두 가지 방법 중 하나를 사용하여 이 오류를 해결할 수 있습니다.
Book
형식에 대해 <Type> 요소에서Dynamic
정책을 정의합니다.다음 default.rd.xml 파일에서와 같이 getter를 호출할 각 속성에 대해 중첩된 <Property> 요소를 추가합니다.
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata"> <Application> <Namespace Name="LibraryApplications" Browse="Required Public" > <Type Name="Book" Activate="All" > <Property Name="Title" Dynamic="Required" /> <Property Name="Author" Dynamic="Required" /> <Property Name="ISBN" Dynamic="Required" /> </Type> </Namespace> </Application> </Directives>