Antworten:
In können C#
Sie keine echten globalen Variablen definieren (in dem Sinne, dass sie keiner Klasse angehören).
Abgesehen davon besteht der einfachste Ansatz, den ich kenne, um diese Funktion nachzuahmen, darin, a static class
wie folgt zu verwenden:
public static class Globals
{
public const Int32 BUFFER_SIZE = 512; // Unmodifiable
public static String FILE_NAME = "Output.txt"; // Modifiable
public static readonly String CODE_PREFIX = "US-"; // Unmodifiable
}
Sie können die definierten Werte dann an einer beliebigen Stelle in Ihrem Code abrufen (vorausgesetzt, sie sind Teil desselben namespace
):
String code = Globals.CODE_PREFIX + value.ToString();
Um mit verschiedenen Namespaces umzugehen, können Sie entweder:
Globals
Klasse, ohne sie in eine bestimmte Klasse aufzunehmen namespace
(damit sie in den globalen Anwendungsnamespace eingefügt wird).namespace
.In C # gibt es keine globale Variable. Zeitraum.
Sie können statische Mitglieder haben, wenn Sie möchten:
public static class MyStaticValues
{
public static bool MyStaticBool {get;set;}
}
static
genau das Beispiel, das Sie angegeben haben, nicht wirklich als globale Variable angesehen werden kann.
Prüfen Sie zunächst, ob Sie wirklich eine globale Variable benötigen, anstatt sie offen zu verwenden, ohne Rücksicht auf Ihre Softwarearchitektur.
Nehmen wir an, es besteht den Test. Abhängig von der Verwendung kann es schwierig sein, Globals mit Rennbedingungen und vielen anderen "schlechten Dingen" zu debuggen. Es ist am besten, sie aus einem Blickwinkel zu betrachten, in dem Sie bereit sind, mit solchen schlechten Dingen umzugehen. So,
static
Klasse (aus Gründen der Verwaltbarkeit).Der Grundriss für eine solche Klasse wäre:
public class Globals
{
private static bool _expired;
public static bool Expired
{
get
{
// Reads are usually simple
return _expired;
}
set
{
// You can add logic here for race conditions,
// or other measurements
_expired = value;
}
}
// Perhaps extend this to have Read-Modify-Write static methods
// for data integrity during concurrency? Situational.
}
Verwendung aus anderen Klassen (innerhalb desselben Namespace)
// Read
bool areWeAlive = Globals.Expired;
// Write
// past deadline
Globals.Expired = true;
Eine nützliche Funktion hierfür ist using static
Wie andere gesagt haben, müssen Sie eine Klasse für Ihre Globals erstellen:
public static class Globals {
public const float PI = 3.14;
}
Sie können es jedoch folgendermaßen importieren, um den Klassennamen nicht mehr vor seine statischen Eigenschaften zu schreiben:
using static Globals;
[...]
Console.WriteLine("Pi is " + PI);