2012-03-09 4 views
3

인터페이스 구성원 목록을 가져 오는 방법이 있습니까? System.Reflection.MemberInfo에 대해 알고 있지만, 특정 인터페이스가 아닌 개체의 모든 것을 포함합니다.인터페이스 구성원 목록을 얻는 방법

여기 프로그램이 있는데, 쓰지 않았으므로 인터페이스를 얻는 방법을 모르겠지만 Ascom 표준 (http://ascom-standards.org)의 일부입니다. MSDN에서

public static void Test1() 
{ 
    Console.WriteLine("mark1"); // this shows up... 
    var type = typeof(Ascom.Interface.ITelescope); 
    var members = type.GetMembers(); 
    Console.WriteLine(members.Count); // gives 0 
    foreach (var member in members) 
    { 
     Console.WriteLine(member.Name); //nothing from here 
    } 
    Console.WriteLine("mark4"); // ...as well as this 
} 
+0

명확히하기 위해'class' (또는'struct')를위한 것과'interface'를위한 두 개의'Type' 객체가 있습니다. 클래스에 인터페이스를 구현하는 메소드를 얻고 싶습니다 . 그게 맞습니까? 왜 그들을 원하니? – svick

+0

난 그냥 인터페이스 목록 싶어요. 런타임에 인터페이스를 동적으로 구현하려고합니다. –

+0

Oops, interface * member * list. –

답변

2

을 그것이 COM 인터페이스의 경우, 당신은 "삽입 상호 운용성 유형"을 해제해야합니다, 그렇지 않으면 그것은 단지 어셈블리에 사용되는 멤버를 삽입합니다. 어셈블리에서 해당 인터페이스의 메서드/속성을 사용하지 않는 것 같습니다. 삽입되지 않은 이유입니다. 따라서 리플렉션으로 나열 할 수 있습니다. (Thx OWO)

7

:

typeof(IList).GetMembers() 

는 현재 유형의 멤버 (속성, 메소드, 필드, 이벤트 등)를 가져옵니다.

2
당신은 단지 인터페이스 유형의 회원 을 요청해야 할

:

var type = typeof(IConvertible); 
var members = type.GetMembers(); 

foreach (var member in members) 
{ 
    Console.WriteLine(member.Name); // ToInt32 etc 
} 
+0

나는 이것을 시도하고 아무것도 반환하지 않습니다. –

+0

@Arlene Beiler : 어떤 인터페이스입니까? 그것은 나를 위해 잘 작동 ... 나는 내가 게시 한 코드로 그것을 시도. –

+0

인터페이스가 구성원이 아닌 공개로 표시되는 것과 관련이 있습니까? 객체 브라우저에서 탐색 할 때 인터페이스는 공개이지만 구성원 중 누구도 공개로 표시되지 않습니다. –

2
var t = typeof(IMyInterface); 
foreach(var m in t.GetMethods()){ 
    Debug.WriteLine(m.Name); 
} 
1

일부 인터페이스의 멤버의 목록을 얻으려면, 당신은 다만 수 : 목록 회원 다른 사람들이 지적했듯이, 그 인터페이스는 다음과 같습니다.

var members = interfaceType.GetMembers(); 

그러나 특정 유형의 회원 그 인터페이스를 구현, 당신은 GetInterfaceMap()을 사용하고 the TargetMethods field을 검사 할 수 있습니다 :

var members = type.GetInterfaceMap(interfaceType).TargetMethods; 
관련 문제