2013-04-05 8 views
10

Spesso durante la navigazione codice, ho imbatterete in qualcosa di simile:passare al metodo implementato, piuttosto che l'interfaccia

public class Fruity 
{ 
    private IOrange _Orange; 

    public Fruity() 
    { 
     _Orange = new Orange() as IOrange; 
    } 

    public void PrepareFruit() 
    { 
     return _Orange.Peel(); 
    } 
} 

Grande, così ora voglio vedere come il metodo di Peel è implementato. Facendo clic con il pulsante destro del mouse sul metodo, mi viene dato Go To Definition che mi porta allo stub dell'interfaccia.

OK, in senso stretto, la definizione è attribuita dall'interfaccia dato che la variabile privata è definita in questo modo, ma esiste un modo per andare semplicemente all'implementazione?

Ovviamente è possibile trovare tutte le referenze, ovvero un approccio a dispersione di chiamate, interfacce e concrezioni. Ma la fonte della realizzazione è evidente in questo caso quindi dovrei essere in grado di saltare ad esso avrei pensato ...

Evidentemente, a volte ci possono essere ambiguità che è descritto bene qui:

Go to definition on concrete type

Ma sicuramente, ci dovrebbe essere un'opzione di implementazione Go To quando l'implementazione è chiara.

+4

Potrebbe valere la pena di scaricare una versione di prova di ReSharper, che ha un "vai a implementazione" e un sacco di altre cose, io don So come ho mai funzionato senza di essa.Non so come fare la stessa cosa nell'IDE predefinito – NDJ

+0

Non è affatto chiaro. Le parentesi non corrispondenti suggeriscono che non hai pubblicato l'intera classe 'Fruity', quindi come possiamo sapere che non hai una funzione membro che imposta' _Orange' su 'new MangoPretendingToBeAnOrange()'? – hvd

+0

Sembra un duplicato di: http://stackoverflow.com/questions/4662784/visual-studio-is-there-a--to-navigate-to-real-implementation-of-method-behin? – nicodemus13

risposta

7

Se si fa doppio clic o si evidenzia Peel e si preme CTRL+, si aprirà la finestra "Passa al simbolo" che elencherà l'implementazione effettiva, in genere come seconda voce. Si tratta del modo più veloce per trovarlo senza strumenti di terze parti. E a differenza di "trova tutti i riferimenti", mostra solo le definizioni del metodo e non ovunque sia chiamato.

+0

Un metodo 'Peel' potrebbe esistere per tutti i diversi frutti e "Navigate To" non si limita alle classi che implementano 'IOrange' per quanto ne so. +1 in ogni caso, se i nomi dei metodi sono ragionevoli, questo non dovrebbe essere un grosso problema. – hvd

+0

In effetti non è assolutamente l'ideale, ma è probabilmente l'opzione migliore senza strumenti di terze parti. – PhonicUK

2

Se si passa al menu di Visual Studio "Visualizza" e si seleziona "Finestra di definizione codice", quando si fa clic su .Peel() potrebbe essere visualizzata l'implementazione di .Peel() (non sempre funziona, ma provarlo e vedere) .

1

Naturalmente esiste già in Visual Studio! È lì da sempre.

Fare clic con il tasto destro del mouse sul codice (Es: proprietà) e selezionare "Visualizza gerarchia chiamate". Nella finestra Gerarchia chiamate selezionare la cartella Implements.

Eccoti qui. Perché Resharper ??? Ovviamente non è così complesso come passare all'implementazione da resharper che consente l'interrogazione diretta sull'interfaccia, ma solo una proprietà o un metodo da tale interfaccia dovrebbe essere sufficiente. Es:

public interface IModule 
{ 
int Count { get; set; } 
} 

public class Module : Imodule 
{ 
    public int Count {get; set;} 
} 

public class Module2 : Imodule 
{ 
    public int Count {get; set;} 
} 

Fare clic destro sulla proprietà Count (ovunque - all'interno della classe o all'interno dell'interfaccia) e selezionare "Visualizza Gerarchia di richiamo", dovrebbe dire quale classe implementa, e quindi l'intera interfaccia.

All'inizio amiamo tutti Resharper, con il tempo, tutti noi lo odiamo!

+0

Sì, questo è un po 'meglio di "Trova tutti i riferimenti", ma manca l'immediatezza di "Vai alla definizione", che è il tipo di cosa che stavo cercando ... –

0

Con Visual Studio> = 2015 è possibile passare alla realizzazione con tasti di scelta rapida Ctrl + F12

Problemi correlati