C#의 Type.GetDefaultMembers() 메서드는 현재 타입(Type)에 정의된 멤버 중 DefaultMemberAttribute가 설정된 멤버를 검색하는 데 사용됩니다. 리플렉션(Reflection)을 활용할 때 특정 타입의 기본 멤버 정보를 동적으로 확인해야 하는 경우에 유용하게 활용할 수 있습니다.
구문
public virtual System.Reflection.MemberInfo[] GetDefaultMembers ();
이 메서드는 매개변수를 받지 않으며, DefaultMemberAttribute가 지정된 멤버 정보를 담고 있는 MemberInfo 배열을 반환합니다. 만약 해당 속성이 설정된 멤버가 존재하지 않으면 빈 배열을 반환합니다.
예제 1
다음은 Type.GetDefaultMembers() 메서드를 구현한 첫 번째 예제입니다.
using System;
using System.Reflection;
[DefaultMemberAttribute("subject")]
public class Demo {
public static void Main(){
Type t = typeof(Demo);
MemberInfo[] member = t.GetDefaultMembers();
if (member.Length != 0){
for (int i = 0; i < member.Length; i++)
Console.WriteLine("{0}", member[i]);
}
else {
Console.WriteLine("Default Member isn't there!");
}
}
public void Name(String str) {}
public String subject{
get{
return "Mathematics";
}
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
System.String subject
이 예제에서 Demo 클래스에는 DefaultMemberAttribute가 "subject"로 설정되어 있으므로, GetDefaultMembers() 메서드는 문자열(System.String) 타입의 subject 속성을 기본 멤버로 반환합니다.
예제 2
이번에는 또 다른 예제를 통해 Type.GetDefaultMembers() 메서드의 동작을 살펴보겠습니다.
using System;
using System.Reflection;
[DefaultMemberAttribute("rank")]
public class Demo {
public static void Main(){
Type t = typeof(Demo);
MemberInfo[] member = t.GetDefaultMembers();
if (member.Length != 0){
for (int i = 0; i < member.Length; i++)
Console.WriteLine("{0}", member[i]);
}
else {
Console.WriteLine("Default Member isn't there!");
}
}
public void Name(String str) {}
public int rank{
get{
return 5;
}
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Int32 rank
두 번째 예제에서는 DefaultMemberAttribute가 "rank"로 설정되어 있기 때문에, 정수형(Int32) rank 속성이 기본 멤버로 검색되어 출력되는 것을 확인할 수 있습니다. 이처럼 GetDefaultMembers() 메서드는 클래스에 지정된 DefaultMemberAttribute의 이름과 일치하는 멤버를 찾아 배열 형태로 제공하며, 인덱서(indexer)와 같은 특수 멤버를 식별하는 데도 활용될 수 있습니다.