2012-03-20 15 views
21

ho visto questo a an MVC3 Razor tutorial a http://www.asp.netConvenzioni di denominazione in C# - sottolinea

public ActionResult Index() { 

    return View(_usrs._usrList); 

} 

Non è che l'utilizzo semplicemente sbagliato? Ho sempre pensato che [docs]

In C#, io di solito lo vedono utilizzato solo quando si definisce la variabile membro privato di fondo per una proprietà pubblica. Altre variabili membro private non hanno un carattere di sottolineatura. Questo utilizzo è in gran parte andato al wayside con l'avvento delle proprietà automatiche.

O è una nuova convenzione di denominazione che sto vedendo? Molto curioso di questo utilizzo nel tutorial di Microsoft.

P.S: L'articolo è abbastanza buono. È solo che tendo a seguire le convenzioni di denominazione per una migliore leggibilità.

+2

Uso i caratteri di sottolineatura sempre per i membri privati, li rende più facili da trovare. '_MyVariable' non sta distruggendo la leggibilità. –

+0

Eww, un metodo con il nome di una proprietà. Questo dovrebbe essere GetIndex(), ovviamente. Scritto da un programmatore C++, probabilmente. Tutto piuttosto soggettivo, usa le tue convenzioni. –

risposta

22

Un buon articolo da leggere sullo sviluppo delle linee guida in stile C# è qui allo StyleCop.

La guida originale per .NET non doveva mai utilizzare caratteri di sottolineatura a meno che non fossero parte di una variabile membro privata, e quindi solo come prefisso, ad es. _customerId. Questo è stato probabilmente ereditato da MFC dove 'm_' era usato come prefisso per le variabili membro.

In pratica non è necessario utilizzare caratteri di sottolineatura. La disambiguazione tra le variabili dei membri privati ​​e i parametri con lo stesso nome dovrebbe essere eseguita con "questo". In effetti tutti i riferimenti ai membri privati ​​dovrebbero essere preceduti da "questo".

L'unico trattino di sottolineatura sembra essere utilizzato molto nei metodi di test unitario. Non sono un fan, ma potrebbe rendere i metodi più leggibili, ad esempio Throw_If_Customer_Is_Null(){...}.

+0

non ha mai sentito questa raccomandazione sull'uso di "questo".Grazie. – cori

+24

Non riesco ancora a passare a usare "questo". Semplicemente non mi sembra giusto :-) – Phil

+0

così è cambiato ... mi chiedevo perché i campioni lo ignorassero. ancora non mi piace molto Conosco persone che potrebbero essere confuse da questo. _qualcosa è ancora più breve di questo.qualcosa di troppo ... suppongo che mi limiterò a sottolineare – Dbl

1

In ASP. I caratteri di sottolineatura NET MVC 3 vengono utilizzati più spesso. Ad esempio tutte le viste parziali che devi nominare con underscore come _MyPartialView.
Sta andando per distinguere facilmente viste parziali e viste nell'applicazione.

Ad ogni modo, in questo esempio non preferisco cantare caratteri di sottolineatura, perché non è necessario usarli. Non è sbagliato, perché è una buona pratica scrivere con gli elenchi di sottolineatura delle tue entità. Ma preferirò scrivere senza di loro.
Quindi entrambi i modi sono giusti, scrivi nel modo in cui ti senti più a tuo agio.

+0

+1: oh capisco. Sono più un ragazzo di webforms. Grazie. ma il codice è agnostico quadro qui giusto? qui una lista e un'istanza sono state date underscore. – naveen

+0

Sì, in questo esempio è davvero indipendente dal framework. Vedi la mia modifica. –

10

Le linee guida sono riepilogate qui http://blogs.msdn.com/b/brada/archive/2005/01/26/361363.aspx e includono la clausola per utilizzare "questo". invece di underscore. Ma trovo che infastidire il mio codice con "questo". Rende il codice più prolisso, ingombrante e di difficile lettura. Inoltre sembra essere seguito meno spesso rispetto al trattino di sottolineatura così come una convenzione, "_" sembra più convenzionale.

+0

Sembra che Microsoft non abbia mai seguito le proprie linee guida, per quanto strano possa sembrare, ha usato un mix di ['m_privateVar'] (https://referencesource.microsoft.com/#System/net/System /Net/Sockets/TCPClient.cs,21) e ['_privateVar'] (https://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs.2765070d40f47b98,referenze) per le variabili private internamente. – jrh

+0

Nei nuovi documenti: ["I campi interni e privati ​​non sono coperti dalle linee guida"] (https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-type-members) . – jrh

Problemi correlati