ReSharper 2022.1 Help

Go to Implementation

This command helps you find actual implementations of types and members — in other words, to locate the source code they execute. For example, from a base type or member, you can jump to any of its end implementations bypassing intermediate steps in the inheritance chain; from a usage of an interface member, you can get to all places where the member is implemented.

The command is available on:

  • usages of types and members: it will list all places where they are implemented;

  • type declarations: it will list all derived types that implement their members, if any;

  • declarations of abstract or interface members that don't have implementation bodies: it will list all inheritors that have implementations.

It is not available on member declarations with an implementation body, including virtual members and default interface methods. Use Go to Derived Symbols to check inheritors of such members.

You can invoke this command from the Solution Explorer, from the File Structure window and other tool windows. If necessary, you can navigate in the opposite direction with the Go to Base Symbols command.

Here is an example of how Go to Implementation bypasses intermediate steps. Suppose that the IDocument interface has the following inheritors:

ReSharper: Go to implementation. Hierarchy

When you invoke the Go to Implementation upon the declaration or a usage of the IDocument, ReSharper shows only two inheritors:

ReSharper: Go to implementation. Drop-down list

That is because other classes are abstract and do not contain implementation of the IDocument.

Navigate to implementation of a type or a type member

  1. Place the caret at a symbol in the editor or select the symbol in a tool window.

  2. Choose ReSharper | Navigate | Go To Implementation in the main menu, press Control+Shift+Alt+B, or click the symbol while holding Ctrl+Alt keys.

    Note that in Visual Studio 2017 and later, the Ctrl+Alt-click is used for adding multiple carets. So you may want to disable this binding by clearing the Use Ctrl+Alt click for Go to Implementation checkbox on the Environment | Search & Navigation page of ReSharper options (Alt+R, O).

  3. If the symbol has only one implementation, ReSharper will navigate to it directly.

    If necessary, you can change the default behavior so that even the single symbol is displayed in the list. To do so, clear the Go to Base/Inheritor if there is only one... checkbox on the Environment | Search & Navigation page of ReSharper options (Alt+R, O).

  4. If the symbol has several implementation, they will be listed in a drop-down. The list may contain items in both bold and regular font. Bold indicates that an item has direct inheritance, while the regular font is used for indirect inheritance.

    You can do one of the following:

    • Click the desired item to open it in the editor.

    • Select the desired item by pressing Up and Down and then press Enter to open it in the editor.

    • Start typing to filter results. Note that you can use CamelHumps here. If necessary, press Esc once to clear the filtering.

    • To view and analyze the list of matched items in the Find Results window, click Show in Find Results Themed icon search results screen gray, press Shift+Enter or + on the numeric keypad .

If the item you navigate to belongs to the current solution, ReSharper opens the corresponding file in the editor and places the caret at the symbol declaration. If it is in referenced libraries, ReSharper navigates according to the settings defined on the Tools | External Sources page of ReSharper options (Alt+R, O).

This feature is supported in the following languages and technologies:

Language: C#

Language: VB.NET

Language: C++

Language: HTML

Language: ASP.NET

Language: Razor

Language: JavaScript

Language: TypeScript

Language: CSS

Language: XML

Language: XAML

Language: Resx

Language: Build Scripts

Language: Protobuf

Language: JSON

Feature is available in C#

Feature is available in Visual Basic .NET

Feature is available in C++

Feature is not available in HTML

Feature is available in ASP.NET

Feature is available in Razor

Feature is not available in JavaScript

Feature is available in TypeScript

Feature is not available in CSS

Feature is not available in XML

Feature is available in XAML

Feature is not available in Resource files

Feature is not available in build script files

Feature is not available in Protobuf

Feature is not available in JSON

The instructions and examples given here address the use of the feature in C#. For details specific to other languages, see corresponding topics in the ReSharper by language section.

Last modified: 28 October 2021