Jak zadeklarować zmienną, aby każda klasa (* .cs) miała dostęp do jej zawartości bez odwołania do instancji?
101
W C#
nie można zdefiniować prawdziwych zmiennych globalnych (w tym sensie, że nie należą one do żadnej klasy).
Biorąc to pod uwagę, najprostsze podejście, jakie znam, aby naśladować tę funkcję, polega na użyciu w static class
następujący sposób:
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
}
Następnie możesz pobrać zdefiniowane wartości w dowolnym miejscu kodu (pod warunkiem, że jest częścią tego samego namespace
):
String code = Globals.CODE_PREFIX + value.ToString();
Aby poradzić sobie z różnymi przestrzeniami nazw, możesz:
Globals
klasę bez dołączania jej do konkretnej namespace
(aby została umieszczona w globalnej przestrzeni nazw aplikacji);namespace
.
Nie ma czegoś takiego jak zmienna globalna w C #. Kropka.
Jeśli chcesz, możesz mieć statycznych członków:
źródło
static
przykładu, który podałeś, nie można tak naprawdę uznać za zmienną globalną.Najpierw sprawdź, czy naprawdę potrzebujesz zmiennej globalnej, zamiast używać jej rażąco, bez uwzględnienia architektury oprogramowania.
Załóżmy, że przejdzie test. W zależności od zastosowania, Globals mogą być trudne do debugowania z warunkami wyścigu i wieloma innymi „złymi rzeczami”, najlepiej jest podejść do nich z punktu, w którym jesteś przygotowany na takie złe rzeczy. Więc,
static
klasę (w celu ułatwienia zarządzania).Podstawowy zarys takiej klasy wyglądałby następująco:
Użycie z innych klas (w tej samej przestrzeni nazw)
źródło
Przydatną funkcją jest do tego
using static
Jak powiedzieli inni, musisz utworzyć klasę dla swoich globali:
Ale możesz to zaimportować w ten sposób, aby nie zapisywać już nazwy klasy przed jej właściwościami statycznymi:
źródło