Una domanda relativamente minore, ma non sono stato in grado di trovare la documentazione ufficiale o persino le opinioni / discussioni del blog su di esso.
In parole povere: quando ho un oggetto privato il cui unico scopo è di servire% privato% co_de, come faccio a nominare quell'oggetto?
class MyClass
{
private object LockingObject = new object();
void DoSomething()
{
lock(LockingObject)
{
//do something
}
}
}
Che cosa dovremmo chiamare lock
qui? Considera anche non solo il nome della variabile, ma come appare nel codice quando si blocca.
Ho visto vari esempi, ma apparentemente nessun consiglio concreto:
-
Molti usi di
LockingObject
(e variazioni comeSyncRoot
).-
Esempio di codice:
_syncRoot
,lock(SyncRoot)
- Questo sembra essere influenzato dall'equivalente
lock(_syncRoot)
di VB, la proprietàSyncLock
che esiste su alcune classi di ICollection e parte di un qualche tipo di pattern di progettazione di SyncRoot (che è probabilmente una cattiva idea) - Essere in un contesto C #, non sono sicuro se vorrei avere una denominazione VBish. Ancora peggio, in VB la variabile è la stessa della parola chiave. Non sono sicuro se ciò possa essere fonte di confusione o meno.
-
Esempio di codice:
-
SyncRoot
ethisLock
dagli articoli MSDN: Dichiarazione di blocco C # , < a href="http://msdn.microsoft.com/en-us/library/3a86s51t.aspx"> VB SyncLock Statement-
Esempio di codice:
lockThis
,lock(thisLock)
- Non sono sicuro se questi siano stati nominati in modo minimamente puramente per l'esempio o meno
- Un po 'strano se lo usiamo in una classe / metodo
lock(lockThis)
. - EDIT: l'articolo di Wikipedia sui blocchi utilizza anche questa denominazione per il suo esempio
-
Esempio di codice:
-
Diversi usi di
static
(di varianti di involucro)-
Esempio di codice:
PadLock
,lock(PadLock)
- Non male, ma il mio unico problema è che non sorprende invocare l'immagine di un lucchetto fisico "che tendo a non associare al concetto di threading astratto .
-
Esempio di codice:
-
Denominare il blocco in base a ciò che intende bloccare
-
Esempio di codice:
lock(padlock)
,lock(messagesLock)
,lock(DictionaryLock)
- Nell'esempio della pagina MSDN SyncRoot VB, ha un esempio di
lock(commandQueueLock)
con un oggettosimpleMessageList
privato - Non penso che sia una buona idea denominare il blocco rispetto al tipo che stai bloccando ("DictionaryLock") in quanto è un dettaglio di implementazione che potrebbe cambiare. Preferisco dare un nome al concetto / oggetto che stai bloccando ("messagesLock" o "commandQueueLock")
- È interessante notare che molto raramente vedere questa convenzione di denominazione per bloccare gli oggetti negli esempi di codice online o su StackOverflow.
-
Esempio di codice:
-
(EDIT) Le specifiche C # nella sezione "8.12 L'istruzione Lock" ha un esempio di questo pattern e lo nomina
messagesLock
-
Esempio di codice:
synchronizationObject
,lock(SynchronizationObject)
-
Esempio di codice:
Domanda: Qual è la tua opinione generalmente sul nominare private oggetti di blocco?
Recentemente, ho iniziato a chiamarli lock(synchronizationObject)
(quindi mi piace l'opzione 3), ma mi sto ritrovando a mettere in discussione quel nome.
Uso frequentemente questo modello di blocco (nell'esempio di codice fornito sopra) in tutte le mie applicazioni, quindi ho pensato che avrebbe avuto senso avere un'opinione / discussione più professionale su una solida convenzione di denominazione per loro. Grazie!