Benutzer mit den meisten Antworten
Wie könnte Funktionsart .myFunction gehen?

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
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!)
- Bearbeitet Stefan FalzModerator Samstag, 11. April 2020 16:38
- Als Antwort markiert dherrmann Dienstag, 14. April 2020 10:57
-
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
-
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
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!)
- Bearbeitet Stefan FalzModerator Samstag, 11. April 2020 16:38
- Als Antwort markiert dherrmann Dienstag, 14. April 2020 10:57
-
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- Bearbeitet Peter Fleischer Dienstag, 14. April 2020 10:32
-
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
-
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:
das geht aber per Default erstmal nur in Webanwendungen. Wenn Du andere Anwendungsarten hast, nutz die
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!) -
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