Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# Type.GetDefaultMembers() 메서드 완벽 가이드

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)와 같은 특수 멤버를 식별하는 데도 활용될 수 있습니다.