Sottolineaturare o non sottolineare, questa è la domanda


131

Ci sono problemi con il non prefisso dei campi privati ​​con un carattere di sottolineatura in C # se la versione binaria verrà utilizzata da altri linguaggi del framework? Ad esempio, poiché C # fa distinzione tra maiuscole e minuscole, puoi chiamare un campo "pippo" e la proprietà pubblica "pippo" e funziona benissimo.

Ciò avrebbe alcun effetto su un linguaggio senza distinzione tra maiuscole e minuscole come VB.NET, ci sarebbero problemi di conformità CLS (o altri) se i nomi si distinguessero solo per il case?


18
Il punto del prefisso di sottolineatura, BTW, non è quello di affrontare i problemi del caso. Deve essere in grado di distinguere facilmente e visivamente campi e gente del posto durante la lettura del codice. Lo userò in C # e VB allo stesso modo.
Neil Hewitt,

2
@NeilHewitt: Bene, impedisce anche che i parametri delle funzioni entrino in conflitto con le variabili membro, che richiedono di anteporre ognuna di esse this, il che fa schifo. EDIT: Ho appena risposto a un commento di quattro anni ...
Ed S.

Per chiarezza, lo standard ufficiale è _camelCase(di sola lettura) github.com/dotnet/corefx/blob/master/Documentation/…
Chris Marisic

Preferisco _camelCase per i negozi di supporto privati. vale a dire: l'archivio privato che contiene i dati assegnati e accessibili tramite una proprietà. Non mi piacciono le proprietà automatiche perché non possono essere inizializzate su un valore noto nella definizione della classe e se voglio un effetto collaterale nel setter, ho bisogno di un backing store dichiarato esplicitamente. Sfortunatamente, questo viene refactored quando uso ^ R ^ E nell'editor c #, quindi devo aggiungerlo di nuovo in ... ogni volta.
TomXP411,

Risposte:


47

Non avrà alcun effetto.

Parte delle raccomandazioni per la scrittura di librerie conformi a CLS è di NON avere due entità pubbliche / protette che differiscono solo per caso, ad esempio NON dovresti avere

public void foo() {...}

e

public void Foo() {...}

quello che stai descrivendo non è un problema perché l'elemento privato non è disponibile per l'utente della libreria


1
Anche se non ci sarà alcun effetto, è comunque una convenzione con cui mi sentirei a disagio - poiché è una ricetta per la confusione se differiscono solo per caso. È troppo facile da leggere o digitare male se l'unica differenza è il capitale iniziale.
ChrisA

2
PS Personalmente, non sottolineo in C #. Per me è una preferenza personale, non una credenza religiosa
Binary Worrier,

1
Ho fatto entrambe le cose e volevo prendere una
decisione

46
Sto usando caratteri di sottolineatura. È più facile distinguerli dagli argomenti e dalle variabili locali.
Rinat Abdullin,

4
Uso _ solo per i campi privati, tuttavia non ho quasi mai campi privati ​​a causa della proprietà automatica 3.5. Generalmente l'unica volta che ho un campo privato è se implemento il caricamento lento su tipi non primitivi.
Chris Marisic,

279

IMPORTANTE AGGIORNAMENTO (12 aprile 2016):

È stato portato alla nostra attenzione che lo standard interno del team .NET CoreFX insiste sull'uso della notazione di sottolineatura senza fornire alcuna spiegazione sul perché. Tuttavia, se osserviamo attentamente regola # 3 è evidente che non v'è un sistema di _, t_, s_prefissi che suggerisce perché _è stato scelto in primo luogo.

  1. Usiamo _camelCaseper campi interni e privati ​​e usiamo di sola lettura ove possibile. Prefisso campi di istanza con _, campi statici con s_e thread campi statici con t_. Se utilizzato su campi statici, readonlydovrebbe venire dopo static(cioè static readonlynon readonly static).
  2. Evitiamo this.se non assolutamente necessario.

Quindi, se sei come il team .NET CoreFX che sta lavorando su un codice a livello di sistema, con prestazioni critiche, multithread, è SUGGERITO VIVAMENTE che:

  • aderire ai loro standard di codifica e
  • usa la notazione di sottolineatura e
  • non leggere più questa risposta

Altrimenti, continua a leggere ...

LA RISPOSTA ORIGINALE:

Concordiamo innanzitutto su ciò di cui stiamo parlando. La domanda è: come accediamo ai membri dell'istanza da metodi e costruttori non statici di una classe / sottoclassi se i modificatori di visibilità lo consentono.

Underscore notazione

  • suggerisce di utilizzare il prefisso "_" nei nomi dei campi privati
  • dice anche che non dovresti mai usare "questo" a meno che non sia assolutamente necessario

Questa notazione

  • suggerisce di usare sempre "questo". per accedere a qualsiasi membro dell'istanza

Perché esiste questa notazione?

Perché è così

  • distinguere un parametro da un campo quando condividono lo stesso nome
  • assicurati di lavorare nel contesto dell'istanza corrente

Esempio

public class Demo
{
   private String name;
   public Demo(String name) {
       this.name = name;
   }
}

Perché esiste la notazione di sottolineatura?

Ad alcune persone non piace digitare "this", ma hanno ancora bisogno di un modo per distinguere un campo e un parametro, quindi hanno accettato di usare "_" davanti a un campo

Esempio

public class Demo
{
   private String _name;
   public Demo(String name) {
      _name = name;
   }
}

Si potrebbe pensare che sia solo una questione di gusti personali ed entrambi i modi sono ugualmente buoni / cattivi. Tuttavia ci sono alcuni aspetti in cui questa notazione batte la notazione di sottolineatura:

Chiarezza

  • nomi di cluster di notazione di sottolineatura
  • questa notazione mantiene intatti i nomi

Carico cognitivo

  • la notazione di sottolineatura è incoerente, ti fa trattare i campi in un modo speciale, ma non puoi usarli con altri membri, ogni volta che devi chiederti se hai bisogno di una proprietà o di un campo

  • questa notazione è coerente, non devi pensare, basta usare sempre "questo" per riferirsi a qualsiasi membro

AGGIORNAMENTO: come è stato sottolineato quanto segue non è un punto di vantaggio

Manutenzione

  • la notazione di sottolineatura richiede di tenere d'occhio _durante il refactoring, ad esempio trasformando un campo in proprietà (rimuovi _) o l'opposto (aggiungi _)

  • questa notazione non ha questo problema

Completamento automatico

Quando è necessario visualizzare l'elenco dei membri dell'istanza:

  • la sottolineatura non ti aiuta molto, perché quando si digita "_" il popup di completamento automatico mostra i campi privati ​​e tutti i tipi disponibili dagli assiemi collegati mescolati con il resto dei membri dell'istanza
  • questa notazione ti dà una risposta chiara, digitando "questo" tutto ciò che vedi è l'elenco dei membri e nient'altro

Ambiguità

A volte devi gestire il codice senza l'aiuto di Intellisense. Ad esempio quando si eseguono revisioni del codice o si esplora il codice sorgente online.

  • la sottolineatura è ambigua: quando vedi Something.SomethingElse non puoi dire se Something è una classe e SomethingElse è la sua proprietà statica ... o forse Something è una proprietà dell'istanza corrente che ha la sua proprietà di SomethingElse

  • questa notazione è chiara: quando vedi Something.SomethingElse può significare solo una classe con una proprietà statica e quando vedi questo. Qualcosa.SomethingSai che sai che Something è un membro e SomethingElse è la sua proprietà

Metodi di estensione

Non è possibile utilizzare i metodi di estensione sull'istanza stessa senza utilizzare "this".

  • la notazione di sottolineatura richiede che non si usi "this", tuttavia con i metodi di estensione che è necessario
  • questa notazione ti salva dall'esitazione, usi sempre "questo", punto.

Supporto di Visual Studio

  • la sottolineatura non ha un supporto integrato in Visual Studio
  • questa notazione è supportata da Visual Studio naturalmente:

    1. "Questo." Qualifica : preferisci che tutti i campi non statici utilizzati nei metodi non statici siano preceduti da this.C #

Raccomandazioni ufficiali

Ci sono molte linee guida ufficiali che dicono chiaramente "non usare i trattini bassi" specialmente in C #


22
Questa è una risposta straordinaria. Grazie per aver dedicato del tempo a compilare tutte queste informazioni.
Tigran,

5
Non proviene dal C ++, perché in C ++ riserva gli identificatori che iniziano con un carattere di sottolineatura per gli usi del linguaggio e della libreria standard.
Rob G,

7
Perché si distingue tra codice critico a livello di sistema, multithread, a livello di sistema e altro codice? In che modo l'utilizzo _camelCasemi può aiutare se il mio codice è critico per le prestazioni / a livello di sistema?
BornToCode

6
L'uso di caratteri di sottolineatura non ha nulla a che vedere con la scrittura di codice critico, multi-thread o a livello di sistema. È la coerenza ciò che conta e il team CoreFX è solo un team che ha concordato una convenzione specifica. Questa è un'ottima risposta, supportata da un'analisi molto piacevole che confronta le convenzioni di denominazione ma credo che la parte aggiunta che dice "i caratteri di sottolineatura sono migliori perché il team CoreFX lo dice" ne riduce davvero la qualità.
Şafak Gür

5
Il mio problema è che capisco l'inferenza logica. en.wikipedia.org/wiki/Inference Ma hey, capisco che non è per tutti.
user603563

67

Tratto dal file della Guida di Microsoft StyleCop:

TypeName: FieldNamesMustNotBeginWithUnderscore

CheckId: SA1309

Causa: il nome di un campo in C # inizia con un trattino basso.

Descrizione della regola:

Una violazione di questa regola si verifica quando un nome di campo inizia con un carattere di sottolineatura.

Per impostazione predefinita, StyleCop non consente l'uso di caratteri di sottolineatura, m_, ecc. Per contrassegnare i campi di classe locali, a favore di "this". prefisso. Il vantaggio di usare "questo". è che si applica allo stesso modo a tutti i tipi di elementi inclusi metodi, proprietà, ecc. e non solo ai campi, rendendo immediatamente riconoscibili tutte le chiamate ai membri della classe, indipendentemente dall'editor utilizzato per visualizzare il codice. Un altro vantaggio è che crea una differenziazione rapida e riconoscibile tra i membri dell'istanza e i membri statici, che non avrà il prefisso.

Se il nome del campo o della variabile deve corrispondere al nome di un elemento associato a Win32 o COM e deve quindi iniziare con un carattere di sottolineatura, posizionare il campo o la variabile in una classe NativeMethods speciale. Una classe NativeMethods è qualsiasi classe che contiene un nome che termina in NativeMethods ed è intesa come segnaposto per wrapper Win32 o COM. StyleCop ignorerà questa violazione se l'elemento viene inserito in una classe NativeMethods.

Una diversa descrizione della regola indica che la pratica preferita in aggiunta a quanto sopra è quella di avviare i campi privati ​​con lettere minuscole e quelli pubblici con lettere maiuscole.

Modifica: come follow-up, la pagina del progetto StyleCop si trova qui: https://github.com/DotNetAnalyzers/StyleCopAnalyzers . La lettura del file della guida fornisce molte informazioni sul perché suggeriscono varie regole stilistiche.


7
È principalmente un tipo di "best practice". Come afferma la regola, il prefisso con "this" può essere applicato a qualsiasi membro non statico mentre il prefisso con qualcos'altro potrebbe non essere applicabile a causa delle regole di sintassi del linguaggio. La parola chiave "this" rende banalmente chiara la destinazione desiderata.
Scott Dorman,

5
Prediligo anche la soluzione del linguaggio ("questo") alla lingua prevista rispetto ai modi artificiali per aggirarlo.
galaktor,

10
C'è anche una regola nello stesso software che dice che non dovresti avere due campi diversi solo nel caso. Quindi cosa fai con una variabile protetta avvolta da una proprietà pubblica?
Lilith River,

5
Il mio unico problema con la cosa "nessuna sottolineatura" è che quando si programma contro un modulo (web) o simile, usare solo "this" non mi aiuta affatto a filtrare fino a quei campi privati ​​che ho definito e invece mi dà un gigantesco elenco degli altri otto milioni di proprietà incluse con detto oggetto.

14
StyleCop sembra dire che, se uso costantemente thisquando mi riferisco a qualsiasi membro della classe, potrei trovare tutte le chiamate a tutti i membri della classe semplicemente cercando this. Non posso discuterne, ma non riesco nemmeno a pensare a un momento in cui dovevo farlo. L'ultima cosa che voglio fare è aggiungere tedio alla codifica e sporcare il mio codice this(che è quasi ungherese) per quasi nessun guadagno pratico. Il fatto è che, se sto osservando una riga di codice, tutto ciò che inizia con una lettera maiuscola o un carattere di sottolineatura è un membro della classe, tutto ciò che è minuscolo è locale.
Devuxer,

27

Dal momento che stiamo parlando di un campo privato, ciò non influisce su un utente della tua classe.

Ma raccomando di usare un carattere di sottolineatura per il campo privato, perché può rendere il codice più facile da capire, ad esempio:

private int foo;
public void SetFoo(int foo)
{
  // you have to prefix the private field with "this."
  this.foo = foo;

  // imagine there's lots of code here,
  // so you can't see the method signature



  // when reading the following code, you can't be sure what foo is
  // is it a private field, or a method-argument (or a local variable)??
  if (foo == x)
  {
    ..
  }
}

Nel nostro team, utilizziamo sempre un prefisso di sottolineatura per i campi privati. Quindi, quando leggo del codice, posso facilmente identificare i campi privati ​​e distinguerli da gente del posto e argomenti. In un certo senso, il carattere di sottolineatura può essere visto come una versione abbreviata di "questo".


14
Bene, ho sempre il prefisso "this", non importa se sto valutando un campo, una proprietà o un metodo.
TheCode Junkie,

9
Per me, il carattere di sottolineatura è una specie di notazione abbreviata di "questo".
M4N,

2
In R #, il consiglio è di non chiamare il parametro foo. Perché non chiamarlo "valore" poiché sai che verrà utilizzato per impostare Foo?
thinkbeforecoding il

17
@Martin: Il problema con il trattino basso come abbreviazione di "this" è che non può essere necessariamente applicato a tutti i membri della classe mentre "this" può farlo. Penso che il codice sia molto più semplice / più pulito con la parola chiave "this". Nel tuo esempio, if (foo == x) farà sempre riferimento al parametro foo.
Scott Dorman,

3
@TheCodeJunkie: sono un sacco di caratteri ridondanti nella tua base di codice.
Ed S.

15

Dopo aver lavorato in un ambiente che aveva regole di stile molto specifiche e molto inutili da allora ho continuato a creare il mio stile. Questo è un tipo che ho girato avanti e indietro molto. Ho finalmente deciso che i campi privati ​​saranno sempre _field, le variabili locali non avranno mai _ e saranno in minuscolo, i nomi delle variabili per i controlli seguiranno vagamente la notazione ungherese e i parametri saranno generalmente camelCase.

Detesto il this. parola chiave che aggiunge solo troppo rumore di codice secondo me. Adoro la rimozione di Resharper ridondante. parola chiave.

Aggiornamento di 6 anni: stavo analizzando gli interni di Dictionary<TKey,T>un uso specifico di accesso simultaneo e ho letto male un campo privato per essere una variabile locale. I campi privati ​​sicuramente non dovrebbero essere la stessa convenzione di denominazione delle variabili locali. Se ci fosse stata una sottolineatura, sarebbe stato incredibilmente ovvio.


18
La thisparola chiave è un riferimento garantito all'oggetto corrente. Non lo capisci con un trattino basso. Non c'è bisogno di detestare this.
Jason S,

15
Perché inventare uno "standard". 'Questo.' ti dice che l'oggetto è una variabile di istanza "Class". ti dice che è una classe varible. Tutto il resto è una variabile di stack. Il carattere di sottolineatura appartiene alla stessa pila di cattive idee in cui la notazione ungherese ora si decompone.
Quarkly,

4
@ DRAirey1 troppo facile perdere questo. quando ne hai bisogno e finisci per fare cose strane con lo stato.
Chris Marisic,

3
@ChrisMarisic Naturalmente sei il benvenuto nella tua opinione sull'uso di _, ma non considerarlo uno standard stabilito quando chiaramente non lo è.
schiaccia il

3
Ti ho perso in "Ho continuato a creare il mio stile".
rory.ap,

12

Mi piace il trattino basso, perché poi posso usare il nome minuscolo come parametri di metodo come questo:

public class Person
{
    string _firstName;

    public MyClass(string firstName)
    {
        _firstName = firstName;
    }

    public string FirstName
    {
        get { return _firstName; }
    }
}

39
stringa pubblica FirstName {get; set privato; }
Jason,

3
Puoi comunque utilizzare le lettere minuscole come parametro del metodo, usando la thisparola chiave. Rendere questo un punto muto nel continuo e sempre controverso "sottolineare o no":public MyClass(string firstName){ this.firstName = firstName; }
mateuscb

5
È il futuro, ora giusto public string FirstName { get; }e il setter è ancora disponibile nel costruttore
Chris Marisic

In questo esempio thissarebbe necessario solo nel costruttore. Non c'è bisogno di usarlo altrove. Così firstNamecome il nome del campo funziona molto bene.
Thomas Eyde,

9

Mi piace ancora molto usare i trattini bassi davanti ai campi privati ​​per il motivo menzionato da Martin, e anche perché i campi privati ​​verranno ordinati in IntelliSense. Questo nonostante la malvagità delle notazioni del prefisso ungherese in generale.

Tuttavia, negli ultimi tempi ho scoperto che l'uso del prefisso di sottolineatura per i membri privati ​​è malvisto, anche se non sono del tutto sicuro del perché. Forse qualcun altro lo sa? È solo il principio del prefisso? O c'era qualcosa in questione con la manipolazione del nome di tipi generici che ha ottenuto caratteri di sottolineatura negli assiemi compilati o qualcosa del genere?


4
Per me il _ ingombra le _word quando si esegue rapidamente _scansione attraverso il codice, diventa meno come leggere semplicemente _e _more _come dover fermarsi a _ ogni volta per riconoscerlo e _realizzare che non è un carattere di controllo di alcuni _sort. Inoltre interrompe il rientro spingendo praticamente il primo carattere utile nei nomi dei campi di una colonna a destra. In genere non mi piace il C ++ perché la maggior parte dei programmatori C ++ tende a scrivere un codice / codice simile a una macchina incredibilmente conciso e lento da leggere e preferisco semplicemente non averlo nel codice C # :)
Oskar Duveborn,

23
Per me, questo. ingombra il file this.words quando rapidamente this.scanning attraverso il codice, diventa meno simile alla sola lettura di questo e di questo.più di questo. come se dovessi fermarti e tutto questo. per riconoscerlo e this.realize is this.not un carattere di controllo di alcuni this.sort. Preferirei di gran lunga trovare l'occasionale _fieldFooo _fieldBarpiuttosto che avere il mio uso disordinato con this.fieldFooo this.fieldBar. Trovo che il this.prefisso sia molto più noioso di un carattere di sottolineatura principale.
AggieEric,

Pensavo forse che questa discrepanza nell'esperienza potesse derivare da file system oldschool o protocolli di trasferimento file in cui non erano ammessi spazi che addestravano alcuni utenti a vedere i caratteri di sottolineatura come spazi e quindi a non distrarre la loro lettura. D'altra parte, ho problemi con nomi di file come ho sempre usato spazi nei miei nomi di file sin dall'inizio ...
Oskar Duveborn,

1
@AggieEric ha colpito l'unghia sulla testa lì. Basta leggere la sua frase mi fa venire il mal di testa! Ho cercato di attenermi alla raccomandazione della SM per anni in questa materia, e sono stato così malato di leggere piccole thisparole blu dappertutto, ho preso una decisione di rabbia nerd proprio lì. Ora, uso religiosamente thisSOLO per riferimenti di proprietà, o quando ho bisogno di distinguere esplicitamente tra thise base. Ognuno per conto suo, immagino :-)
Riegardt Steyn,

1
Penso che sia perché, in definitiva, iniziare qualsiasi cosa con un carattere di punteggiatura danneggia la leggibilità. Non sembra disturbare tutti, ma per me sembra molto innaturale leggere tutto ciò che inizia con la punteggiatura. Più come l'inglese è il codice, più facile lo trovo da leggere. E con gli IDE moderni è molto semplice capire la differenza tra locali e membri privati ​​perché molto probabilmente avranno colori diversi.
Tim Long,

5

Raccomandazione di Style Cop o meno, scavare in .NET Framework mostra molto "_" utilizzo per le variabili membro. Qualunque cosa i creatori di Style Cop raccomandino, non è ciò che la maggior parte dei dipendenti MS sta usando. :) Quindi continuerò con il trattino basso. Perché personalmente commetto molti meno errori usando il trattino basso quindi questo (esempio: usando varName = varName invece di this.varName = varName, è davvero bloccato in me)


3
Underscore è consigliato anche per la guida di stile di base .NET: github.com/dotnet/corefx/wiki/Coding-style
landoncz

3

Penso che nel complesso i campi di livello di classe siano un errore nella progettazione della lingua. Lo avrei preferito se le proprietà di C # avessero il loro ambito locale:

public int Foo
{
   private int foo;
   get
   {
      return foo;
   }
   set
   {
      foo = value;
   }
}

Ciò consentirebbe di smettere di usare interamente i campi.

L'unica volta in cui ho mai anteposto un campo privato con un carattere di sottolineatura è quando una proprietà richiede un campo di supporto separato. È anche l'unica volta che utilizzo campi privati. (E dal momento che non uso mai campi protetti, interni o pubblici, questa è l'unica volta in cui uso il periodo dei campi.) Per quanto mi riguarda, se una variabile deve avere un ambito di classe, è una proprietà della classe.


La banda C # sembra concordare con te con il nuovo int intuo privato {get; set;} zucchero di sintassi.
Dana,

Oh certo; quello che sto descrivendo qui è totalmente impraticabile senza quello.
Robert Rossney,

Quello che stai descrivendo è "Proprietà implementate automaticamente". Sfortunatamente, con Visual Basic.NET, questo utilizza effettivamente una variabile _prefix "nascosta" dietro le quinte, ad esempio se avessi una proprietà autoimplementata "Proprietà pubblica Foo As Integer", allora NON potresti avere la dichiarazione della variabile membro "Private _foo as

No, non sto descrivendo le proprietà implementate automaticamente, almeno non nel mio esempio. Sto descrivendo un livello di scoping che non esiste in C # o VB. È davvero un peccato che VB abbia scelto un modo così banale di confondere i nomi dei campi di supporto. C # è abbastanza brutto da non creare mai una variabile con lo stesso nome per caso.
Robert Rossney,

3

La notazione _fieldName per i campi privati ​​è così facile da interrompere . Usando "questo". la notazione è impossibile da rompere. Come spezzeresti la notazione _? Osservare:

private void MyMethod()
{
  int _myInt = 1; 
  return; 
}

Ecco fatto, ho appena violato la tua convenzione di denominazione ma si compila. Preferirei avere una convenzione di denominazione che sia a) non ungherese eb) esplicita. Sono a favore di eliminare il nome ungherese e questo si qualifica in un certo senso. Invece del tipo di un oggetto davanti al nome della variabile hai il suo livello di accesso.

In contrasto con Ruby, dove il nome della variabile @my_numberlega il nome all'ambito ed è infrangibile.

modifica: questa risposta è diventata negativa. Non mi interessa, rimane.


11
Difficilmente una critica valida di una convenzione di denominazione dire che è possibile per gli sviluppatori non seguirla.
Robert Rossney,

8
Wow, la tua definizione di "facile da rompere" e la mia sono, come, opposti completi. Il tuo significa "facile da rompere intenzionalmente", mentre la maggior parte delle altre persone probabilmente significa "facile da rompere accidentalmente ". Lascio che sia un esercizio per il lettore capire quale sia più rilevante nello scrivere un codice leggibile ...
Konrad Rudolph,

6
@Konrad: sembri pretenzioso quando dici "come esercizio al lettore". Questo non è un libro di matematica.
jcollum,

3
Leggermente meno negativo ora :) Mentre possiamo remare contro la corrente, non mi piace anche la convenzione di sottolineatura. Dal mio punto di vista non è diverso dalla notazione ungherese e, a dire il vero, mi fa sanguinare gli occhi (fa male la leggibilità). Abbiamo buttato fuori Notazione ungherese con C # ed è ora di abbandonare quest'ultima traccia di non fidarsi del tuo IDE.
Tim Long,

1
Ho sentito che MS in realtà dice che il carattere di sottolineatura non deve essere usato nella sua guida in stile C #. blogs.msdn.microsoft.com/brada/2005/01/26/… - sezione 2.6 - sembra che Brad Abrams sia almeno d'accordo con noi!
jcollum,

1

Quando si desidera che l'assembly sia conforme a CLS, è possibile utilizzare l'attributo CLSCompliant nel file assemblyinfo. Il compilatore si lamenterà quindi quando il codice contiene elementi non conformi a cls.

Quindi, quando si hanno 2 proprietà che differiscono solo nel caso, il compilatore genererà un errore. D'altra parte, quando hai un campo privato e una proprietà pubblica nella stessa classe, non ci saranno problemi.

(Ma prefisso sempre i miei membri privati ​​con un carattere di sottolineatura. Mi aiuta anche a chiarire quando leggo il mio codice che una determinata variabile è un campo membro).


0

Mi piace usare i trattini bassi davanti ai miei campi privati ​​per due motivi. Uno è già stato menzionato, i campi si distinguono dalle proprietà associate nel codice e in Intellisense. Il secondo motivo è che posso usare le stesse convenzioni di denominazione sia che sto programmando in VB o C #.


1
ehi, è saggio? Il carattere di sottolineatura non significa "continua sulla riga successiva" in VB?
JBR Wilkinson,

1
Solo se il trattino basso è seguito da uno spazio.
Rob Windsor,

La lettera iniziale è minuscola o maiuscola per me va bene :)
ManoDestra

0

Non ci sono implicazioni di sorta. Quando viene compilato il codice, tutto ciò che è importante per il compilatore è lo spazio dei nomi e la visibilità del campo / proprietà. Un carattere di sottolineatura è altrettanto significativo di qualsiasi altro carattere quando si nomina un identificatore. Il vero trucco è usare una convenzione che tu e le persone intorno a voi capirete.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.