How do you find all implementations of an interface?

29,605

Solution 1

(Edit based on comment...)

If you have ReSharper installed:

In Visual Studio, right click on the type name and choose "Go to Inheritor". Alternatively, select the type name, then go to ReSharper/View/Type Hierarchy to open up a new tab. (The menu will show you the keyboard shortcut - this can vary, which is why I explained how to find it :)

If you don't have ReSharper:

  • You can use Reflector, which is able to show you all the type hierarchy very easily - just under the type name are expandable items for base types and derived types. Similar tools are available such as ILSpy and dotPeek.
  • Buy ReSharper - it's a great tool :)

Solution 2

In plain Visual Studio (since 2010) you can right click a method name (definition in interface or implementation in other class) and choose View Call Hierarchy. In Call Hierarchy window there is "Implements" folder where you can find all locations of the interface method implementation.

Solution 3

Put the cursor to class or interface type and

CTRL + F12

Solution 4

With Visual Studio 2010+

Right click a member method and choose view call hierarchy. Expand the Implements folder. This lists all the types that implement the interface the method belongs to.

enter image description here

With Resharper 7

Right Click the interface > Navigate To > Derived Symbols. The symbols listed in bold derive directly from the interface. Non-bold symbols derive from a superclass.

enter image description here

Solution 5

For those using Visual Studio 2015, there is this awesome extension called Go To Implementation. Give it a try.

Once you've installed the extension, you can just right click at any occurrences of the interface (e.g. IUrlShortener) and click on Go To Implementation menu. If you only have one class that implements the interface, clicking the menu will bring you directly to the class. If you have more than one class that implements the interface, it will list all the classes.

Share:
29,605
iammichael
Author by

iammichael

.

Updated on July 05, 2022

Comments

  • iammichael
    iammichael almost 2 years

    Suppose you have an interface defined in C#. What is the easiest method to find all classes that provide an implementation of the interface?

    The brute force method would be to use "Find References" in Visual Studio and manually look through the results to separate out the usages from the implementations, but for an interface in a large codebase that is heavily referenced with relatively few implementations, this can be time consuming and error prone.

    In Java, running javadoc on the codebase (using the -private option to include private classes) would generate a documentation page for the interface (e.g. Comparable) that includes all implementing classes for the interface as well as any subinterfaces (though it doesn't include implementing classes of the subinterfaces, these are relatively easy to determine by drilling down into the listed subinterfaces). It's this functionality that I'm looking for but with C# and Visual Studio.

  • iammichael
    iammichael over 15 years
    ReSharper is already on my list of requests; I figured it probably had the capability, but alas, I don't yet have it. Reflector allowed me to get the answer to my specific search, though it was a bit of a pain to find and add all the assemblies that reference the one with the interface definition!
  • NekojiruSou
    NekojiruSou almost 10 years
    this should be the Accepted Answer as it (a) does the job, and (b) does not rely on [paid] third party tools
  • ForceMagic
    ForceMagic almost 9 years
    While this link may answer the question, it is better to include the essential parts of the answer here and provide the link for reference. Link-only answers can become invalid if the linked page changes.
  • Nik A.
    Nik A. almost 9 years
    @ForceMagic what "essential parts of the answer"? It's a link to a downloadable extension. I'll add more explanations to the answer though, thanks.
  • wziska
    wziska over 8 years
    Finally! Though I still can't believe this crucial feature is missing in VS.
  • Nik A.
    Nik A. over 8 years
    @wziska As you wished, this feature is now implemented in Visual Studio 2015 Update 1 RC :)
  • beruic
    beruic over 8 years
    Reflector is not free
  • Jon Skeet
    Jon Skeet over 8 years
    @beruic: Not any more - it was back when I wrote this, I think :) Will add some free options...
  • Wahid Bitar
    Wahid Bitar about 8 years
    @JonSkeet does Resharper browse even the third party DLLs ?. for example, I want to see the implementations for an interface in some NuGet package and the implementations are in that package.
  • Jon Skeet
    Jon Skeet about 8 years
    @WahidBitar: I would expect it to do that within assemblies in your project. I suggest you give it a try :)
  • Wahid Bitar
    Wahid Bitar about 8 years
    Yup found it. you can get it from Inspect -> Hierarchies. Thanks a lot my master ^_^. BTW you always inspire me. thank you :)
  • Alexandru
    Alexandru over 7 years
    The hotkey for this is CTRL + F12
  • Nik A.
    Nik A. over 7 years
    Take note that this only works in Visual Studio 2015 Update 1 and above.
  • yoyo
    yoyo over 7 years
    Note that ILSpy is free, and includes a Visual Studio add-in with which you can navigate to the interface (assuming it's your own code) and then view the call hierarchy.
  • rustyx
    rustyx about 3 years
    ReSharper has become too expensive for individual use, unfortunately (€299, and that just for one year).
  • Jon Skeet
    Jon Skeet about 3 years
    @rustyx: That's for organizations. For personal use, it's significantly less: jetbrains.com/resharper/buy/#personal?billing=yearly
  • Bahtiyar Özdere
    Bahtiyar Özdere about 3 years
    @JokeHuang it actually does in my IDE. I tried in rider it also works. But you need to implement it in your own classes. You cannot find it in built in types.
  • Joe Huang
    Joe Huang about 3 years
    @BahtiyarÖzdere Actually, I want to find all classes that indirectly implement this interface. A third-party library class implements a built-in interface, and my class inherited from the third-party class.
  • Bahtiyar Özdere
    Bahtiyar Özdere about 3 years
    @JokeHuang which IDE are you using?
  • Joe Huang
    Joe Huang about 3 years
    @BahtiyarÖzdere VS2019 Community 16.10.2.