Globale Variablen in VB.net

  • WPF

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    Globale Variablen in VB.net

    Hallo zusammen,

    ich habe ein Problem globale Variablen zu deklarieren.

    Ich habe in einer Klasse drei Variablen erstellt, wobei sich eine Variable, aus zwei Variablen zusammensetzen soll. Der Sinn dahinter ist, dass "xmlFile" dynamisch in den Prozeduren bestimmt werden soll.

    ---
    Public Class GlobalVar
    Public Shared xmlPath As String = "C:\Test\"
    Public Shared xmlFile As String
    Public Shared xmlDoc As String= xmlPath & xmlFile & ".xml"
    End Class
    ---

    Wenn ich die globale Variable xml Doc verwende bekomme ich immer folgende Ausgabe "C:\Test\.xml". Obwohl ich in Visual Studio den Inhalt der Variable xmlFile sehe, wird er nicht an die Variable xmlDoc übergeben.

    Stehe ich auf der Leitung? Ich finde den Fehler nicht.

    Grüße
    Du hast eine einmalige Zuweisung: Public Shared xmlDoc As String= xmlPath & xmlFile & ".xml". Wenn Du xmlFile änderst, wird xmlDoc natürlich nicht automatisch aktualisiert. Die Neuzuweisung an xmlDoc musst Du in einer Extraprozedur machen, nachdem Du xmlFile geändert hast.
    Eine Alternative wäre ggf. mit Properties zu arbeiten, da Du bei deren Änderung quasi automatisch eine Prozedur ablaufen lassen kannst. Ich weiß/glaube aber nicht, dass das auf Shared-Ebene läuft.

    EDIT: Doch, geht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Hi
    sowas macht man in der Regel als Eigenschaft, wie VaporiZed erwähnt hat, wobei ich auch nicht mit Sicherheit sagen kann, dass man es überhaupt als statischen Member modelliert.
    Eigenschaften haben den Vorteil, dass in ihnen Code ausgeführt wird, anstatt einfach das Datum nach außen zu repräsentieren:

    VB.NET-Quellcode

    1. Public Shared X As Integer

    kann zu

    VB.NET-Quellcode

    1. Public Shared Property X As Integer

    oder

    VB.NET-Quellcode

    1. Private Shared _y As Integer
    2. Public Shared Property Y As Integer
    3. Get
    4. Return _y
    5. End Get
    6. Set(value As Integer)
    7. _y = value
    8. End Set
    9. End Property

    geändert werden.

    Im obigen Code ist die Eigenschaft X eine Kurzschreibweise und funktioniert genau so, wie Y (getter und setter sind implizit implementiert, das erledigt der Compiler für dich. Ebenso wird im Hintergrund ein Feld für X angelegt).
    Wenn du jetzt innerhalb des Get- bzw. Set-Blocks Code ausführst, kannst du bspw. in deinem Fall den String neu berechnen und musst das somit nicht extern erledigen, was zu Fehleranfälligkeit und Redundanz führt, wenn du an mehreren Stellen neue Werte setzt.

    Viele Grüße
    ~blaze~