Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you find all implementations of an interface?

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.

like image 392
iammichael Avatar asked Mar 06 '09 20:03

iammichael


People also ask

How do I find all implemented classes for an interface in eclipse?

Put the cursor on the name of the interface and press F4 (Open Type Hierarchy). That will open a window that shows a tree with all classes that Eclipse can find that implement the interface.

How do you name interfaces and implementations?

The name of the interface should describe the abstract concept the interface represents. Any implementation class should have some sort of specific traits that can be used to give it a more specific name.


2 Answers

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.

like image 64
phoose Avatar answered Sep 24 '22 23:09

phoose


(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 :)
like image 32
Jon Skeet Avatar answered Sep 23 '22 23:09

Jon Skeet