Aufrufen von Funktionen in einer Klasse - vielleicht nicht verfügbar - geht es auch elegeanter ?

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von EaranMaleasi.

    Aufrufen von Funktionen in einer Klasse - vielleicht nicht verfügbar - geht es auch elegeanter ?

    Moin!

    ich habe eine Klasse die teilweise für eine Logfunktion verfügbar ist. Hier eine Beispiel

    VB.NET-Quellcode

    1. _AcLog.Write("adsfajdfslaj")


    Um nicht zu einem Absturz zu kommen frage ich vorher immer ab, ob die Kasse überhaupt definiert ist:

    VB.NET-Quellcode

    1. If Not IsNothing(_AcLog) Then
    2. _AcLog.Write("adsfajdfslaj")
    3. endif


    Das ist für einzelne Zeilen, die innerhalb eines Codes stecken sehr müssig und bringt langfristig viel Code mit sich.

    Gibt es auch eine elegantere Lösung für diese Problemstellung?

    Gruß Jan
    Hallo

    Ich frage mich auch warum das vorkommen kann das die Variable nicht instanziert ist.

    Aber....

    VB.NET-Quellcode

    1. _AcLog?.Write("adsfajdfslaj")


    Grüße
    sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ich verstehe zwar auch nicht, warum das mal verfügbar ist und mal nicht.
    Aber wenn es denn so ist, dann lagere doch die Prüfung in eine Methode aus

    Visual Basic-Quellcode

    1. WriteLog("adsfajdfslaj")
    2. Sub WriteLog(Text As String)
    3. If _AcLog IsNot Nothing Then _AcLog.Write(Text)
    4. End Sub
    Oder du packst die Methode in eine String-Extension und kannst es noch eleganter aufrufen.

    @Nofear23m
    Deine Version gefällt mir noch besser, geht aber meines Wissens erst ab VS2015
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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

    petaod schrieb:

    warum das mal verfügbar ist

    @Nofear23m Jou

    jan99 schrieb:

    ob die Kasse überhaupt definiert ist
    Du meinst offensichtlich instanziiert.
    Wenn solch ein Konstrukt beliebig oft in Deinem Code vorkommt, machst Du:

    VB.NET-Quellcode

    1. Sub LogWrite(txt As String)
    2. If _AcLog IsNot Nothing Then
    3. _AcLog.Write(txt)
    4. End If
    5. End Sub

    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!
    Hallo

    petaod schrieb:

    Deine Version gefällt mir noch besser, geht aber meines Wissens erst ab VS2015

    Wenn nicht etwas anderes explizit gerschrieben wird darf man davon ausgehen das mit aktuellen IDEs gearbeitet wird. Wenn jemand ein Problem mit windows hat darf man auch davon ausgehen das alle aktuellen Updates drauf sind. Zumindest meine Meinung. Warum soll ich eine kostenlose IDE nicht am neuesten Stand haben? Vorallem weil man mehrere Version parallel laufen lassen kann.
    Ich für meinen Teil gehe immer von (im Moment) VS 2017 aus.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Nofear23m schrieb:

    darf man davon ausgehen das mit aktuellen IDEs gearbeitet wird.
    Das sehe ich nicht so, weil Studio und Framework halt verschiedene Dinge sind.
    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!

    RodFromGermany schrieb:

    Das sehe ich nicht so, weil Studio und Framework halt verschiedene Dinge sind.

    Und wo habe ich etwas von einem Framework geschrieben? Mir geht es ja nicht darum unter welchem Framework jemand Programmiert, habe ich auch nicht geschrieben.
    Ich bin nur der Meinung das, sollte jemand mit z.b. VS 2010 Programmieren so sollte er dies dazu schreiben. Ansonsten ist er selber schuld sollte in Tipp von "uns" nicht funktionieren.

    Ich kann ja mit VS 2017 genauso unter .Net Framework 2.0 proggen. Oder was meinst du?
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Nofear23m schrieb:

    Oder was meinst du?
    Genau das meine ich.
    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!
    Die Firma, für die ich momentan programmiere, hatte bis Ende letzten Jahres noch VS2012 als Kompatibilitätsgrundlage.
    Inzwischen ist es VS2015.
    Alles, was ich also auf dem Teamserver einchecke, muss diesem Standard genügen.
    Auf meinem Entwicklungsrechner ist mein privates (MPN) VS2017 installiert.
    Die anderen Entwickler bekommen von der Software-Verteilung VS2015 zugewiesen.
    Weil VS2017 noch gar nicht paketiert ist.

    Für Alleinunterhalter teile ich @Nofear23ms Meinung.
    In der Praxis ist das jedoch nicht immer so einfach.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    petaod schrieb:

    Für Alleinunterhalter teile ich @Nofear23ms Meinung.
    In der Praxis ist das jedoch nicht immer so einfach.

    Um das das alle VS 2017 oben haben müssen gehts ja nicht. Bitte verdreht mir nicht alle die Worte. Ich habe lediglich gesagt das ich davon ausgehe, SOLLTE DER TE NICHTS ANDERES ANGEBEN.

    So, jetzt bitte wieder OnTopic.
    Danke
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Moin!

    bin nun wieder im Job und habe das mit dem

    VB.NET-Quellcode

    1. _AcLog?.Write...


    einmal ausprobiert.

    Wie petaod schon vermutet hat scheitert dieser Weg bei mir wegen VS2013 schon.



    Aber was ich nicht verstehe, wie kann eine Methode an der VS-Version scheitern??

    Gruß Jan
    Hallo

    Bin da auch nicht so Fit und am laufenden aber ich denke der Compiler kann dies nicht interpretieren und scheitert dadurch.
    Bitte nicht schlagen wenn ich das jetzt verwechsle.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Aber was ich nicht verstehe, wie kann eine Methode an der VS-Version scheitern??

    Die "Nullbedingten Operatoren" (die Dinger mit dem "?") wurden erst mit Visual Studio 2015 eingeführt.
    Wenn man also noch VS2010 nutzt und eine Anweisung wie "_AcLog?.Write..." schreibt, dann kann der
    alte Compiler da nichts mit anfangen. Da hilft nur aufrüsten auf die aktuelle Version des VS.
    An manchen Tagen gibt es zu allem Überfluss auch noch Ärger!

    jan99 schrieb:

    wie kann eine Methode an der VS-Version scheitern
    Das Problem ist, dass der Compiler der mit VS13 kommt von dem Befehl ?. absolut nichts weiß. Das kam erst mit späteren Versionen. Während man mit neuren Versionen von VS ältere Sprachversionen anzielen kann (runter bis C#1) ist es anders herum nicht möglich.

    Dazu kommt noch, dass einige Sprachfetarues mit dem Framework in Verbindung stehen. Bsp. async/await:
    async/await ist ein Sprachfeature das mit C#5 (und C#6) eingeführt wurde. Wenn man nun also hergeht, und ein .NET4 Projekt anlegt, Tasks verwendet und hofft, dass diese mit async/await benutzt werden können, fällt gehörig auf die Nase. async/await erwartet eine Funktion Namens GetAwaiter(), die die Tasks aus .NET 4 noch nicht hatten. Erst ab .NET 4.5 haben Tasks diese Funktion. Zwar gibt es ein NuGet Paket, das in der Vergangenheit mal funktioniert haben soll, jedoch wurde es schon ne Weile nicht mehr aktualisiert und scheint mit der neuesten NuGet Version leicht inkompatibel zu sein.