none
Wie könnte Funktionsart .myFunction gehen? RRS feed

  • Frage

  • Hallo zusammen,

    ich möchte mal eine spezielle Frage stellen.
    Es gibt doch bei VBnet folgende Möglichkeiten der Funktion für eine Variable bspw.  ".ToString", ".ToLongDate" u.a.
    Mich würde interessieren, ob, und wenn ja, wie man eventuell selbst eine derartige Funktion schreiben und auch anwenden kann.

    Kann dazu jemand Tipps geben?

    Grüße-


    Dietrich

    Samstag, 11. April 2020 15:11

Antworten

  • Hallo Dietrich,

    das nennt sich Erweiterungsmethoden bzw. Extension methods.

    So würde die Deklaration solcher Methoden aussehen:

    Namespace SFW
    
    Public Module Extensions
    
        <Extension()> _
        Public Function ToHtml( ByVal Value As String, ByVal ReplaceBreaks As Boolean ) As String
    
        Dim Result As String = Value
            Result = System.Web.HttpUtility.HtmlEncode( Result )
    
            If ReplaceBreaks Then
                Result = Result.ReplaceBreaks()
            End If
            
            Return Result
    
        End Function
    
        <Extension()> _
        Public Function ReplaceBreaks( ByVal Value As String ) As String
    
        Dim Result As String = Value
            Result = Result.Replace( ControlChars.NewLine, "<br />" )
            Result = Result.Replace( ControlChars.Cr, "<br />" )
            Result = Result.Replace( ControlChars.Lf, "<br />" )
            
            Return Result
    
        End Function
    
    End Module
    
    End Namespace

    Und so der Aufruf:

    Dim Html As String
        Html = PlainTextVariable.ToHtml()

    Der erste Parameter von Erweiterungsmethoden in VB.NET gibt den Datentyp. In den Beispielmethoden ist das String. Würdest Du also ersten Parameter bspw. ByVal Value As Int64 schreiben, würde die Erweiterungsmethode nur bei Variablen vom Typ Int64 erscheinen bzw. aufrufbar sein.

    P.S.: Ach so: Den Namespace kannst Du natürlich auch weglassen. Falls nicht, musst Du den in den entsprechenden Klassen natürlich noch importieren.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport
    @ConnectOurPeople - Hilfsangebot - Videotelefoniesysteme für isolierte Menschen (keine Werbung!)



    Samstag, 11. April 2020 16:35
    Moderator
  • Hi Dietrich,
    und du hast wirklich die Referenz zu System.Web.dll dem Projekt hinzugefügt?


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    • Als Antwort markiert dherrmann Dienstag, 14. April 2020 10:57
    Dienstag, 14. April 2020 10:38
  • Hallo,

    ich versteife mich nicht auf diese Methode. Habe schon meine eigene eingebaut, nur noch nicht getestet.
    Wollte nur mal das Problem bei deiner ansprechen.
    Mich hatte nur gewundert, dass zu dem Fehler keine Korrekturmöglichkeit, wie etwa Import, angezeigt wurde bei Maus-Hover.

    Mittlerweile habe auf Peters Tipp hin den Verweis System.Web gesucht und gefunden, und das Problem ist beseitigt.

    Danke nochmals an euch Beide!

    Grüße-


    Dietrich

    • Als Antwort markiert dherrmann Dienstag, 14. April 2020 10:57
    Dienstag, 14. April 2020 10:57

Alle Antworten

  • Hallo Dietrich,

    das nennt sich Erweiterungsmethoden bzw. Extension methods.

    So würde die Deklaration solcher Methoden aussehen:

    Namespace SFW
    
    Public Module Extensions
    
        <Extension()> _
        Public Function ToHtml( ByVal Value As String, ByVal ReplaceBreaks As Boolean ) As String
    
        Dim Result As String = Value
            Result = System.Web.HttpUtility.HtmlEncode( Result )
    
            If ReplaceBreaks Then
                Result = Result.ReplaceBreaks()
            End If
            
            Return Result
    
        End Function
    
        <Extension()> _
        Public Function ReplaceBreaks( ByVal Value As String ) As String
    
        Dim Result As String = Value
            Result = Result.Replace( ControlChars.NewLine, "<br />" )
            Result = Result.Replace( ControlChars.Cr, "<br />" )
            Result = Result.Replace( ControlChars.Lf, "<br />" )
            
            Return Result
    
        End Function
    
    End Module
    
    End Namespace

    Und so der Aufruf:

    Dim Html As String
        Html = PlainTextVariable.ToHtml()

    Der erste Parameter von Erweiterungsmethoden in VB.NET gibt den Datentyp. In den Beispielmethoden ist das String. Würdest Du also ersten Parameter bspw. ByVal Value As Int64 schreiben, würde die Erweiterungsmethode nur bei Variablen vom Typ Int64 erscheinen bzw. aufrufbar sein.

    P.S.: Ach so: Den Namespace kannst Du natürlich auch weglassen. Falls nicht, musst Du den in den entsprechenden Klassen natürlich noch importieren.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport
    @ConnectOurPeople - Hilfsangebot - Videotelefoniesysteme für isolierte Menschen (keine Werbung!)



    Samstag, 11. April 2020 16:35
    Moderator
  • Hallo Stefan,

    vielen Dank erst mal für die Aufklärung.
    Werde mich demnächst damit befassen, also nach den Feiertagen.

    Auch dir wünsche ich geruhsame Ostern bei guter Gesundheit!

    Viele Grüße-


    Dietrich

    Samstag, 11. April 2020 17:27
  • Hallo Stefan,

    beim Probieren deines Codes erhalte ich folgenden Fehler:

    den ich nicht beseitigen kann....?

    Grüße-


    Dietrich

    Dienstag, 14. April 2020 09:48
  • Hi,
    und welchen Fehler erhältst genau (mal mit der Maus über die gewellte rote Linie fahren)?

    Ich vermute, da fehlt eine entsprechende Referenz auf die System.Web.dll , siehe HttpUtility Klasse.


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks


    Dienstag, 14. April 2020 09:53
  • HttpUtility

    ist kein Member von System.Web


    Dietrich

    Dienstag, 14. April 2020 10:21
  • Hi Dietrich,
    und du hast wirklich die Referenz zu System.Web.dll dem Projekt hinzugefügt?


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    • Als Antwort markiert dherrmann Dienstag, 14. April 2020 10:57
    Dienstag, 14. April 2020 10:38
  • Hallo Dietrich,

    versteif dich doch nicht auf diese Methode. Du kannst ja alles mögliche machen, meine ToHtml Erweiterungsmethode war ja nur ein Beispiel von vielen.

    Bzgl. der Meldung:

      HttpUtility.HtmlEncode Method

    das geht aber per Default erstmal nur in Webanwendungen. Wenn Du andere Anwendungsarten hast, nutz die

      HtmlEncode(String)

    der WebUtility Klasse.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport
    @ConnectOurPeople - Hilfsangebot - Videotelefoniesysteme für isolierte Menschen (keine Werbung!)

    Dienstag, 14. April 2020 10:42
    Moderator
  • Hallo,

    ich versteife mich nicht auf diese Methode. Habe schon meine eigene eingebaut, nur noch nicht getestet.
    Wollte nur mal das Problem bei deiner ansprechen.
    Mich hatte nur gewundert, dass zu dem Fehler keine Korrekturmöglichkeit, wie etwa Import, angezeigt wurde bei Maus-Hover.

    Mittlerweile habe auf Peters Tipp hin den Verweis System.Web gesucht und gefunden, und das Problem ist beseitigt.

    Danke nochmals an euch Beide!

    Grüße-


    Dietrich

    • Als Antwort markiert dherrmann Dienstag, 14. April 2020 10:57
    Dienstag, 14. April 2020 10:57
  • Meine eigenen Extensions arbeiten einwandfrei!
    Danke!

    Dietrich

    Dienstag, 14. April 2020 13:35