如何获取接口成员的列表
本文关键字:列表 成员 取接口 何获 | 更新日期: 2023-09-27 18:27:22
有办法获得接口成员列表吗?我知道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
}
来自MSDN:
typeof(IList).GetMembers()
获取当前类型的成员(属性、方法、字段、事件等)。
如果它是COM接口,则应禁用"嵌入互操作类型",否则它将只在程序集中插入已使用的成员。我想你在程序集中没有使用该接口中的任何方法/属性,这就是为什么它们永远不会被插入,所以你可以用反射列出它们。(Thx OWO)
您只需要向成员询问接口类型:
var type = typeof(IConvertible);
var members = type.GetMembers();
foreach (var member in members)
{
Console.WriteLine(member.Name); // ToInt32 etc
}
var t = typeof(IMyInterface);
foreach( var m in t.GetMethods() ){
Debug.WriteLine(m.Name);
}
要获得某个接口的成员列表,您可以这样做:列出该接口的成员,正如其他人所指出的:
var members = interfaceType.GetMembers();
但是,如果您想知道特定类型的哪些成员实现该接口,可以使用GetInterfaceMap()
并检查TargetMethods
字段:
var members = type.GetInterfaceMap(interfaceType).TargetMethods;