In C# Io uso sempre un classi statiche per fornire questa funzionalità. classi statiche sono trattati in dettaglio here, ma per breve tempo contengono solo i membri statici e non sono istanziati - essenzialmente sono funzioni globali e le variabili accessibili tramite il nome della classe
Ecco un semplice esempio:
(e namespace.)
public static class Globals
{
public static string Name { get; set; }
public static int aNumber {get; set; }
public static List<string> onlineMembers = new List<string>();
static Globals()
{
Name = "starting name";
aNumber = 5;
}
}
Nota, sto anche utilizzando un inizializzatore statico che è garantito per essere eseguito ad un certo punto prima che vengano utilizzati/chiamati membri o funzioni.
Altrove nel programma si può semplicemente dire:
Console.WriteLine(Globals.Name);
Globals.onlineMemeber.Add("Hogan");
oggetti statici sono solo "creato" una volta. Quindi ovunque l'applicazione utilizzi l'oggetto sarà dalla stessa posizione. Sono per definizione globali. Per utilizzare questo oggetto in più punti, è sufficiente fare riferimento al nome dell'oggetto e all'elemento a cui si desidera accedere.
È possibile aggiungere membri statici di qualsiasi classe e saranno disponibili a livello globale, ma penso che avere un posto per globali è un design migliore.
Lo stato globale è malvagio. Rende per i programmi che sono difficili da ragionare e fare il debug. – Oded
@Oded, true ma a volte non è possibile evitarlo - quindi renderlo chiaro e trasparente è molto importante. – Hogan