vb static modifier

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von loeffel.

    vb static modifier

    Hallo,

    sollte man den Static Modifizierer nutzen? Den soll es in C# nicht geben und das wohl aus gutem Grund.
    Wenn ich zählen will wie oft eine Methode gelaufen ist dann passt die natürlich super da rein. Ansonsten kann man es natürlich mit einer übergeordneten Klassenvariablen genauso machen

    Viele Grüße

    Haudruferzappeltnoch schrieb:

    Den soll es in C# nicht geben und das wohl aus gutem Grund.
    Irrtum.
    Es gibt in C# eine Reihe static-Verwendungsmöglichkeiten.
    VB.NET-Module sind grob in Etwa static Klassen in C#.
    Shared Prozedur-Mofifikatoren sind static in C#.
    Static in VB (möglicherweise BASIC allgemein) sind Variablen in Prozeduren, die ihren Wert behalten und für alle Instanzen identisch sind.
    In C# mache ich da private static-Klassenvariablen draus.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ich glaub er meint dieses static: docs.microsoft.com/de-de/dotne…eference/modifiers/static - dassis was anneres als Shared.

    Das ist eine Alternative zu einem Shared ClassMember - kann nämlich lokal in der Methode sein.
    Vor Jahren hatte das mal einen Bug, und haben sie gefixt. Ich hab das mal im IL angeguckt - das sah höchst verwirrend und ineffizient aus, wo ein Class-Member eine Zeile IL war.
    Das hat mich damals so erschreckt, dassichs seither nicht verwende.
    Heute würde ichs vielleicht wieder damit versuchen, wenn ich Bedarf hätte.
    Ich würd den Static-Modifizierer nicht nutzen. Es gibt sauberere Alternativen. Früher hab ich es aus in Ermangelung bekannter Alternativen (= ich wusste zuwenig) genutzt, heutzutage gar nicht mehr. Falls benötigt, dann wie Du selbst vorgeschlagen hast: Sauber(er) per Shared-Klassenvariable.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ah aber der Punkt ist ja dass die Static Variable erstmal nicht Shared über die Klasse läuft. Also Static Shared muss man extra lokal deklarieren, das ist dann besonders wild.
    Ohne Shared hätte jede Instanz ihre eigene Version dieser Static Variable, die dann nur für die Methode der jeweiligen Instanz erhalten bleibt.

    Aber gut davon abgesehen, dann lass ichs besser weg.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Da hast Du recht. Danke für die Erinnerung/Klarstellung. Ist ja doch nur ne normale Instanzvariable, die eben nur lokal verfügbar ist. Kommt davon, wenn man es nie nutzt. :S
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Mach Dir mal ein ganz simples VB.NET-WinForm-Programm ohne und mit einer Static Variablen in einer Prozedur, nix weiter.
    Compiliere das und sieh Dir das ganze im IlSpy an. Finde die Unterschiede. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Lad Dir auf GitHub ILSpy runter, installier es, dann kompilier Dein Testprogramm und öffne dessen EXE mit ILSpy, indem Du ILSpy öffnest und dann Dir Deine EXE raussuchst.

    Mein Testcode:

    VB.NET-Quellcode

    1. Friend Class Form1
    2. Private Foo As Integer = 0
    3. Sub MethodWithoutStatic()
    4. Foo += 1
    5. End Sub
    6. Sub MethodWithStatic()
    7. Static Bar As Integer = 0
    8. Bar += 1
    9. End Sub
    10. End Class

    Das Ergebnis für die normale Methode:


    Und für die Static-Methode 8| :
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Nicht Öffnen sondern per DnD draufziehen. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    "What we provide, you can use!"

    Gilt nicht nur fuer Static Variablen bei VB (die vom Prinzip her "einfach" zu Klassen-Feldern promiviert und dann fuer alles andere unsichtbar gemacht werden), sondern und im Uebrigen auch fuer den BackgroundWorker und Goto.
    Aber...es kommt klar immer auf den Kontext an.

    Ich stimme (bislang!) fast immer mit ErfinderDesRades ueberein.
    (Insbesondere bei seinen Buchempfehlungen.)

    ;)