C# 搜索实现哪些接口的类
我看到过一些信息,可以通过编程方式搜索程序集中的所有类型,以确定哪些类实现了哪些接口或继承了哪些基类。但是当您浏览msdn(例如Stream类)时,它们会向您展示一个很好的继承层次结构图,您可以单击以查看其他类从中继承了什么 但是对于接口,似乎不存在相同的功能 这是一个一般性问题。我可以很容易地找到从特定父类继承的所有类。。。但是有没有办法用接口来实现呢?除了编写程序来搜索所有程序集之外?我正在寻找一种方法来搜索实现特定接口的所有类… 为了解决你的问题,你可以C# 搜索实现哪些接口的类,c#,inheritance,interface,C#,Inheritance,Interface,我看到过一些信息,可以通过编程方式搜索程序集中的所有类型,以确定哪些类实现了哪些接口或继承了哪些基类。但是当您浏览msdn(例如Stream类)时,它们会向您展示一个很好的继承层次结构图,您可以单击以查看其他类从中继承了什么 但是对于接口,似乎不存在相同的功能 这是一个一般性问题。我可以很容易地找到从特定父类继承的所有类。。。但是有没有办法用接口来实现呢?除了编写程序来搜索所有程序集之外?我正在寻找一种方法来搜索实现特定接口的所有类… 为了解决你的问题,你可以 IEnumerables.ToL
IEnumerables.ToList()
代码:
IEnumerables.ToList()
谷歌:
ILIST C#
您将获得包含以下信息的链接:
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class ArrayList : IList, ICollection,
IEnumerable, ICloneable
public static class TypeExtension
{
public static IEnumerable<Type> GetInterfaces(this Type type)
{
foreach (var intf in type.GetInterfaces())
{
yield return intf;
foreach (var x in intf.GetInterfaces())
yield return x;
}
}
}
您可以看到IList,页面底部还有指向其他列表的链接。Visual Studio中的CTRL+ALT+J将打开对象浏览器 搜索您的类型,例如“IEnumerable” 展开类型。展开“派生类型” 这可能不会让你得到一切,但这是一个开始 (至少VS 2012 PREMIUM)类似的内容:
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class ArrayList : IList, ICollection,
IEnumerable, ICloneable
public static class TypeExtension
{
public static IEnumerable<Type> GetInterfaces(this Type type)
{
foreach (var intf in type.GetInterfaces())
{
yield return intf;
foreach (var x in intf.GetInterfaces())
yield return x;
}
}
}
公共静态类类型扩展
{
公共静态IEnumerable GetInterfaces(此类型)
{
foreach(type.GetInterfaces()中的var intf)
{
收益率intf;
foreach(intf.GetInterfaces()中的变量x)
收益率x;
}
}
}
解决您的问题:新的只读集合(collection1.Concat(collection2.ToList())
。请注意,如果修改了collection1
或collection2
,它将不会反映在结果集合中。如果您希望它反映您将需要的自定义类所做的更改,.NET framework中没有任何东西可以为您做到这一点。(如果你不明白如何让全班同学提出一个新问题,我们可以帮助你)@ScottChamberlain谢谢,这回答了问题的具体部分。我已经删除了问题的特定部分,只是把问题作为一个一般性的问题,“我如何搜索哪些类实现了__;接口”。@T McKeown什么是IEnumerables?我哪儿都看不到。另外,当我在谷歌上搜索IList C#时,我只想到了我所期望的所有正常的东西,包括IList接口等。你在说什么?谢谢你提到了另一个问题,但答案是“购买再竖琴”。。。我认为这不是一个好答案(但很高兴知道),或者您可以查看第二个响应,它是“您可以右键单击方法名称(接口中的定义或其他类中的实现),然后选择查看调用层次结构。在调用层次结构窗口中有”实现“您可以在其中找到接口方法实现的所有位置的文件夹。“再次感谢,但例如,如果我创建了一个Stream对象,并在Read方法上查看调用层次结构,我只能找到一些称为Read的地方。这很有用,有时可能会帮助您找到一个实现流的类,您还不知道这个类,但它绝不会搜索所有内容,除非您向所有.Net中的每个程序集添加引用。这很有帮助,但肯定不是问题的完整答案。哦-对不起-我忘了提。在我的调用层次结构窗口中,没有“implements”文件夹。只有“读取调用”和“读取调用”以及“覆盖读取”,这在某些情况下可能有助于您在当前空间中查找内容。但是你必须添加对.Net中每个程序集的引用,才能使它成为一个广泛有用的搜索。我不知道这是因为我在使用VS 2013 PRO,还是因为其他原因,但我不明白你在说什么。类似地,你的评论让我发现:这基本上和你说的一样,但我仍然只看到基类型,而不是派生类型。是的,我也不记得在以前的pro版本中看到过。不过,这是一个很好的特性。我同意需要一些简单的方法来查询这个问题,因为有些方法需要一个接口,很难判断哪些默认的.net实现是可用的。