2009-08-11 8 views
61

C'è un modo rapido per trovare tutte le implementazioni di, non i riferimenti a, il metodo/proprietà/etc di un'interfaccia? Ecco alcuni esempi di codice:Come si trovano rapidamente le implementazioni del metodo di un'interfaccia?

public class SomeClass : IBaseClass 
{ 
    public Int32 GetInt() 
    { 
    return 1; 
    } 
} 

public interface IBaseClass 
{ 
    public Int32 GetInt(); 
} 

public class SomeOtherClass 
{ 
    IBaseClass _someClass; 
    private TestMethod() 
    { 
    _someClass = new SomeClass(); 
    _someClass.GetInt(); 
    } 
} 

voglio arrivare rapidamente a SomeClass.GetInt(), mentre la revisione SomeOtherClass.TestMethod(). Se faccio clic destro su _someClass.GetInt() e clicco su 'Vai a definizione', mi porta all'interfaccia. Se faccio clic su "Trova tutti i riferimenti", potrei potenzialmente vedere un elenco di tutti gli usi ... non solo le classi che implementano il metodo GetInt().

C'è un modo più veloce per trovare questo? Qualche consiglio da parte di altri sviluppatori? Stiamo usando D.I. per la maggior parte delle nostre dipendenze, il che significa che la traccia attraverso il codice profondamente annidato richiede per sempre.

+1

Utilizzare MAIUSC + F12 per mostrare tutti i riferimenti, comprese le definizioni. –

risposta

21

Alt-End lo farà in ReSharper, credo.

+17

Ouch, $ 349 per sviluppatore. Questo è quello che abbiamo pagato per VS2008 pro. –

+10

non hai chiesto per un passo di vendite per ReSharper, e ciò che si sta guadagnando è affar nostro, ma considera che tipo di denaro che si sta facendo a fare quello che stai facendo, e quindi prendere in considerazione quanto velocemente si aveva recuperare il canone. Se i numeri sono giusti, ne valgono $ 350. Per darvi qualche punto di vista, io sostengo che, dopo 1 mese di realtà rallentare me sufficiente per imparare pro ei contro di ReSharper (e, a dire il vero, sto ancora imparando alcuni di loro) mentre io lavoro, lo strumento aumenta la mia la produttività come autore del codice è del 30% a meno (probabilmente è più alto, francamente, ma non voglio esagerare). – lance

+4

Sono d'accordo, qualsiasi società che esita a prezzo resharpers (C# unica edizione è ancora più conveniente) è un idiota dal tempo si rifiuti, senza costi di una società di $ 1000. Sono anche d'accordo con l'opinione di Lance secondo cui il costo del ricondizionatore può essere recuperato facilmente in un mese. –

1

R # ha un'opzione Vai a implementazione nel menu a comparsa, che è davvero utile per questo.

+0

Suoni grandiosi, niente in VS che conoscete? –

+0

Non oltre Trova riferimenti che hai già menzionato. Se non conosci R # ti incoraggio davvero a dare un'occhiata. Oltre a funzioni come questa, ha un utile consiglio per la codifica e un potente set di funzionalità di refactoring. –

+0

Non è R # un linguaggio di programmazione completamente diverso o esiste anche un IDE R #? Stiamo creando un'applicazione ASP.NET MVC ... –

9

Senza ReSharper il modo migliore per farlo è:

Trova nei file (Ctrl + Shift + F) Trova: "Classe * ISomeClass" trovare delle opzioni: "Usa caratteri jolly"

Questo troverà tutta l'implementazione e di quanto tu possa cercare la tua funzione in un'implementazione concreta.

+1

Sembra strano vedere ISomeClass, di solito iniziamo interfacce con 'I' piuttosto che classi ... ma siamo solo noi –

98

Dal momento che non piace usare il mouse mentre la codifica, io di solito

  • spostare il cursore sopra il metodo
  • tipo ctrl + k clrl + t per aprire la finestra Gerarchia chiamate
  • spostare verso Implem nodo ents.
  • Tipo di ritorno per andare all'applicazione selezionata

Per quanto ne sappia questo è il modo più rapido per trovare l'attuazione di un metodo, senza ReSharper.

(A proposito: è possibile utilizzare lo stesso sistema per passare da un'implementazione metodo di classe per la dichiarazione di interfaccia corrispondente: basta selezionare la radice)

+0

Wow, molto bello, grazie! –

+0

Hai bisogno di VS2010 per quello, giusto? – Constantin

+0

Sì, penso di sì. –

1

Se l'interfaccia è nella stessa libreria come modello concreto che in genere vuoi navigare, puoi aggiungere un 'alias' all'oggetto concreto. Gli "usi" sono comunque aiutanti e questo aiuta.

using System; 
using PrimaryImplementation = YourNamespace.YourConcreteObject; 


public interface IYourInterface{ 

} 

Quando si è presi per l'interfaccia, avete un modo rapido (e sporco) di ottenere l'attuazione primario dell'interfaccia. F12-> F12!