2010-06-08 20 views
53

Quando aggiungo un nuovo gestore di eventi per qualsiasi evento, VS crea un metodo come object_Click. Ma ReSharper sottolinea questo metodo come Avviso, perché tutti i metodi non dovrebbero avere delimitatori come "_".Convenzioni di reSharper per i nomi di gestori di eventi

Come è possibile personalizzare le regole di ReSharper in modo che non evidenzi tali metodi? O forse dovrei rinominare tali metodi?

Grazie in anticipo.

+1

Penso di averlo preso a lavoro ma al momento non me lo ricordo, seguirò con la regola se ricordo. – Pat

+1

Ho sbagliato, ho appena vissuto con l'avvertimento per gli eventi che sembra. =/sorry – Pat

risposta

31

Personalmente, suggerirei di rinominare i metodi. In generale, penso che VS abbia nomi terribili sia per i controlli che per gli eventi.

Preferisco fare un nome di metodo dire cosa è , non come lo chiama. Ciò promuove anche il riutilizzo. È vero che la firma di un gestore di eventi spesso non è l'ideale per il riutilizzo - direi che spesso un'espressione lambda chiamare un metodo con parametri più sensibili sarebbe utile:

button.Click += (sender, args) => SaveCurrentDocument(); 

ma ovviamente il progettista non supporta tale :(

Naturalmente, rinominare tutti i metodi sta per essere più lavoro che solo cambiando le impostazioni R #, se si può trovare un po 'che il lavoro ...

+9

Ma il metodo in questione sta facendo quello che dice. Sta gestendo il fatto che è stato fatto clic su un pulsante.Se l'azione desiderata è salvare il documento, il gestore del clic del pulsante dovrebbe chiamare un altro metodo per farlo. Non mi piace molto codice nei gestori di eventi proprio per questo motivo. Si intromette anche nel cablaggio di più azioni con lo stesso risultato (clic del pulsante, voce di menu, voce di menu contestuale, ecc.). Se ognuno di questi gestori chiama lo stesso metodo comune, non c'è confusione. – Mel

+0

@Mel: Ma allora perché preoccuparsi di avere il metodo? L'espressione lambda del mio esempio non sarebbe più chiara? –

+5

Nella maggior parte dei casi, penso che lo farebbe. Per un evento come fare clic su una riga all'interno di una griglia, penso che il gestore di eventi dovrebbe essere responsabile dell'interpretazione delle informazioni specifiche del controllo, come determinare quale riga è stata cliccata e forse estrarre l'oggetto associato prima di passarlo a un pozzo metodo chiamato che fa qualcosa con quell'oggetto. Se questo può essere fatto all'interno di una lambda, allora fantastico. A volte è bello farlo scoppiare in un gestore di eventi "corretto" per chiarezza, però. Come sempre ... dipende. – Mel

0

Nel menu file si dovrebbe avere "Resharper" Fare clic su -> Opzioni -> Convenzioni di denominazione (nel menu a sinistra).

Da lì è possibile specificare le convenzioni di denominazione utilizzate per ciascuno dei tipi/stili di denominazione.

+5

Grazie, ma ReSharper consente di aggiungere alcune regole come UpperCamelCase, lowerCamelCase, ALL_UPPER, all_lower, First_upper. Ma ho bisogno di qualcosa di simile - UpperCamelCase_UpperCamelCase. ReSharper 5 ha "Impostazioni avanzate" ma non riesco a scrivere la regola giusta. –

+0

@PavelBelousov Resharper 7 può gestire le restrizioni menzionate qui. Ho il mio set up per consentire il seguente per i metodi privati: lowerCamelCase_UnderscoreTolerant, _lowerCamelCase_UnderscoreTolerant, UpperCamelCase. Sono abbastanza sicuro che anche l'R # 6 potrebbe, dato che è quello che stavo usando nel mio ultimo lavoro. – edsobo

111

per C# (o VB), fare la seguente modifica:

ReSharper | Opti ons | Lingue | C# | Stile di denominazione C#, Impostazioni avanzate ... Modifica "Iscrizioni agli eventi nei campi" da $object$_On$event$ a $object$_$event$.

Si consiglia inoltre di aggiungere ulteriori regole ai tipi di entità come "Tipi e spazi dei nomi" per tenere conto di classi generate dal codice come "Default". Ad esempio, aggiungi una nuova regola con un prefisso del nome "" e uno stile del nome "UpperCamelCase".

+15

Nel mio caso stava cambiando $ oggetto $ _On $ evento $ in $ oggetto $ _ $ evento $ (rimuovendo 'On'). Altrimenti, i nomi dei metodi come Page_Load erano ancora sottolineati. – Olaf

+5

C'è un modo per modificarlo in modo che $ $ $ inizi con una lettera maiuscola? –

+3

Questa è la risposta corretta IMO. –

6

Ho appena creato un'estensione per Visual Studio 2010, EventHandler Naming, che consente di specificare con un semplice schema ciò che si desidera siano i nomi dei gestori di eventi generati. Il modello predefinito nell'estensione è Su $ (NomeSito) $ (NomeEvento) che ti darà nomi di eventi come OnBtnNameClick invece di btnName_Click. È possibile ottenere l'estensione al http://tech.einaregilsson.com/2010/12/22/better-eventhandler-names-in-visual-studio-2010/

Problemi correlati