varaible global verfügbar
-
Hallo,
ich habe eine varaible n der ein connection string drinnen steht
wie muss ich die definieren, damit ich die überall in meinen programm nutzen kann?
-
Ich denke mal static und internal (oder vielleicht public).
-
Es gibt mehrere Möglichkeiten.
Einerseits kannst Du über die System.Properties gehen und den Connection String ausserhalb der Applikation in seienr separataen XML- Config File Speichern. Diese Vorgehensweise schlägt Microsoft vor. Der Vortiel ist, neben der Möglichkei8t der Benutzung dafür vorgesehener .NET Klassen und einer Integration in VS2005, dass diese Dateien ausserhalb der Applikation geändert werden können.
Geht es Dir direkt um globale Variablen, kannst Du z.B. mit einer public Klasse namens globals.cs arbeiten, welche wiederum public varianblen enthält. Davon erzeugst Du beim Programmstart eine Instanz und übergibst eine Referenz auf diese Instanz jeder anderen Klasse in Deinem System, welche die "globalen" variablen dann aufnehmen soll.
Im Allgemeinen sind globale Variablen in c# aber nicht vorgesehen.
-
saruman@work schrieb:
Im Allgemeinen sind globale Variablen in c# aber nicht vorgesehen.
Wie nennst du denn das hier?
static class Globals { internal static string foo = "Hallo"; }
Ich finde foo ist eine globale Variable auf die das gesammte Assembly zugreifen kann (per Globals.foo).
Ansonsten eben public machen.
-
Helium schrieb:
saruman@work schrieb:
Im Allgemeinen sind globale Variablen in c# aber nicht vorgesehen.
Wie nennst du denn das hier?
static class Globals { internal static string foo = "Hallo"; }
Ich finde foo ist eine globale Variable auf die das gesammte Assembly zugreifen kann (per Globals.foo).
Ansonsten eben public machen.Naja, foo ist keine globale variable, sondern eine global verfügbare Klassenvariable von Globals. Um eine echte globale Variable zu sein müßte sie so wie in C ausserhalb einer Klasse existieren können. Somit hat saruman vollkommen recht wenn er sagt, das es das Konzept globaler Variablen in C# nicht gibt.
Der UNterschied wird noch deutlicher wenn man die Properties hinzunimmt:
static class Globals { private static string foo = "Hallo"; public static string Foo { get { return foo; } } }
weil Du in dem Fall, anders als bei echten globalen Variablen, den Zugriff auf foo einschränken kannst um z.B. zu verhindern das diese von überall im Programm verändert werden kann. (eines der Hauptprobleme im Umgang mit globalen Variablen)
-
Wann ist etwas eine globale Variable? Wenn sie global verfügbar ist? Könnte man also sagen eine globale Variable ist eine global verfügbare Variable?
Ist eine Klassenvariable eine Variable? Wenn nein, warum nennt sie sich dann so?
Ich würde sagen eine global verfügbare Klassenvariable ist eine globale Klassenvariable ist eine globale Variable.
Das ist wohl eine:
// c++ int foo;
Diese hier ist genauso, nur in einem Namensraum
// c++ namespace X { int foo; }
Diese hier lässt sich genau so verwenden, wie die aus dem Beispiel davor:
// c++ struct X { static int foo; } int X::foo;
Dein Beispiel mit dem Property verstehe ich nicht.
Ein bischen C-Code:
// in foo.h int Foo(); // in foo.c static int foo; int Foo() { return foo; }
Tada! Niemand kann auf foo schreibend zugreifen, aber jeder kann es über Foo lesen.