2012-04-12 24 views
12

Someone once said:best practice per l'utilizzo di variabili globali in C#

una "variabile globale" è in realtà una variabile si crea semplicemente "contenere alcune informazioni" perché il vostro modello a oggetti è debole, e non avere trovato un "vero scopo" per la variabile di esistere. Le variabili globali sono quasi sempre un segno di una maggiore deformità architettonica.

That might be true. Ma non conosco nessun buon esempio di un programma grande e buono fatto senza variabili globali, e certamente non usato come suggerito in precedenza. Scope is the actual key. Puoi dire in a program with only one class che i suoi parametri sono not global vars. Ma loro sono.

Comunque ...

sto ancora afferrare il concetto di singleton e, per quanto posso dire, non actually non hanno senso in C#. Inoltre ho la sensazione che, quando avere uno stato globale non può essere evitato abbiamo ancora dovremmo evitare semplicemente utilizzando una classe pubblica piena di static properties:

Quindi, se non singletons né una classe pubblica, che cosa dobbiamo fare per avere vars globali in C#?

E quando dovremmo usarli? Supponendo che molto probabilmente non possono essere evitati. Mai.

E perché dovremmo evitare di utilizzare uno static class o static in generale? Se è davvero così per C#.

In una frase: Quali sono le migliori pratiche sull'utilizzo delle variabili globali in Csharp?

+2

Tecnicamente non esiste una variabile globale in C#, possono naturalmente essere globali a una classe e resi pubblici, essenzialmente ottenendo la stessa cosa, ma con un po 'di margine. –

+0

Perché i singleton non hanno senso in C#? –

+3

Sebbene sia scritto bene e in modo corretto, penso che questa domanda non si applichi a questo sito? – gbianchi

risposta

6

È tutta una questione di contesto.

Se è possibile determinare le ambientali variabili che è necessario per un calcolo, si può avvolgere che il calcolo in un grande contesto in cui taliglobali dall'aspetto variabili hanno un ambito più ristretto di abitare (sono ora locale al contesto).

Questo è meglio perché ora è possibile avere più istanze del proprio contesto , che dovrebbe funzionare in modo indipendente e non interferire l'una con l'altra. Viene anche chiamato contesto rientranti.

+0

Quindi stai dicendo l'intera [variabile globale] (http: //en.wikipedia. org/wiki/Global_variable) il concetto semplicemente non esiste in C# e se c'è qualcosa che copia il suo comportamento in C# (come i singleton) dovrebbe ** mai ** essere usato? Se è così, potresti fornire un esempio per salvare un valore di configurazione per una costante che sarà la stessa attraverso l'intera applicazione? Diciamo che voglio avere in un solo posto una configurazione per la versione dell'applicazione e il sito web aziendale. E un terzo tipo di var globale che non è costante, l'attuale linguaggio applicativo. – cregox

+0

Sì, esistono, e sta a te controllarli o limitare il loro ambito. La versione dell'applicazione e il sito web aziendale sembrano _metadata_ che dovrebbero essere solo associati a _assembly_ (con un attributo assembly); il linguaggio dell'applicazione può dipendere dall'utente attualmente connesso, quindi potrebbe riguardare un _richiesto_, o un _session_ scope. Si ottiene l'immagine ... –

+0

Beh, niente di tutto questo mi sembra globale - eppure tutti sembrano comportarsi come tale. Penso di averne capito ... – cregox