Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 搜索实现哪些接口的类_C#_Inheritance_Interface - Fatal编程技术网

C# 搜索实现哪些接口的类

C# 搜索实现哪些接口的类,c#,inheritance,interface,C#,Inheritance,Interface,我看到过一些信息,可以通过编程方式搜索程序集中的所有类型,以确定哪些类实现了哪些接口或继承了哪些基类。但是当您浏览msdn(例如Stream类)时,它们会向您展示一个很好的继承层次结构图,您可以单击以查看其他类从中继承了什么 但是对于接口,似乎不存在相同的功能 这是一个一般性问题。我可以很容易地找到从特定父类继承的所有类。。。但是有没有办法用接口来实现呢?除了编写程序来搜索所有程序集之外?我正在寻找一种方法来搜索实现特定接口的所有类… 为了解决你的问题,你可以 IEnumerables.ToL

我看到过一些信息,可以通过编程方式搜索程序集中的所有类型,以确定哪些类实现了哪些接口或继承了哪些基类。但是当您浏览msdn(例如Stream类)时,它们会向您展示一个很好的继承层次结构图,您可以单击以查看其他类从中继承了什么

但是对于接口,似乎不存在相同的功能

这是一个一般性问题。我可以很容易地找到从特定父类继承的所有类。。。但是有没有办法用接口来实现呢?除了编写程序来搜索所有程序集之外?我正在寻找一种方法来搜索实现特定接口的所有类…

为了解决你的问题,你可以

 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实现是可用的。