如何获取接口成员列表

时间:2012-03-09 21:30:22

标签: c#

有没有办法获得接口成员列表?我知道System.Reflection.MemberInfo,但它包含对象中的所有内容,而不仅仅是某个接口。

这是程序,我不知道如何获取界面,因为我没有写它,但它是Ascom标准(http://ascom-standards.org)的一部分。

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
}

5 个答案:

答案 0 :(得分:8)

来自MSDN:

typeof(IList).GetMembers()
  

获取当前Type的成员(属性,方法,字段,事件等)。

答案 1 :(得分:2)

您只需要要求成员获取接口类型

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

如果是COM接口,则应禁用“嵌入互操作类型”,否则只会在程序集中插入已使用的成员。我猜你不会在程序集中使用该接口的任何方法/属性,这就是为什么它们永远不会被插入,所以你可以用反射列出它们。 (谢谢OWO)

答案 4 :(得分:1)

要获取某个界面的成员列表,您可以这样做:列出该界面的成员,正如其他人所指出的那样:

var members = interfaceType.GetMembers();

但是,如果您想知道某些类型的成员实现该界面,您可以使用GetInterfaceMap()并检查the TargetMethods field

var members = type.GetInterfaceMap(interfaceType).TargetMethods;