Benutzer mit den meisten Antworten
vs2010: automatisches overloading aller string-funktionen?

Frage
-
hallo, wie man im Bild sieht, gibt es eigentlcih nur eine Funktionsdeklaration. Mein VS2010 findet aber zwei??
Ist mein VS2010 korrupt?
Geht mit string-Funktionen mit beliebigen Namen, nicht jedoch wenn das Funktionsergebnis integer oder objekt oder double ist.
Antworten
-
Da du einen String zurückbekommst, kann dieser auch umgedeutet werden als Char-Array. Und in dem Fall wäre in der Klammer der Index des Zeichens zu finden.
Gibst du also tstfunc() an, ist es einfach dein kompletter Returnwert,
nimmst du hingegen tstfunc(0), ist es nur das erste Zeichen von eben diesem Stringwert.
Also eigentlich alles korrekt im VS. ;-)
Und dass das bei Integer, Double oder Object nicht klappt, ist umgekehrt auch klar.
LG, Dennis.
EDI Consultant/Developer
Ich nutze meistens VB6 und VS2005 bis VS2012
Bitte die Antworten sowie weitere hilfreiche Beiträge von Mitgliedern markieren. Vielen Dank.
- Als Antwort vorgeschlagen Heslacher Mittwoch, 17. Juli 2013 08:50
- Als Antwort markiert Stefan Hoffmann2 Donnerstag, 18. Juli 2013 07:50
-
Hallo,
nein nicht nur "normal" bei Visual Basics Mehrfach-Verwendung von runden Klammern.
Zum einen kennhzeichnet () eine Methode (Prozedur/Funktion) ohne Parameter - und ist optional, auch wenn das nicht zur Lesbarkeit beiträgt.
Zum anderen werden runde Klammen auch für den Zugriff auf indizierte Eigenschaften (Indexer) verwendet - bei String ist das die Chars Eigenschaft.
Und so ergibt sich folgendes Sammelsurium:
Dim s1 As String = TestFunc() Dim s2 As String = TestFunc()(0) ' Geht auch sollte man aber der Klarheit zu liebe vermeiden Dim s1bad As String = TestFunc Dim s2bad As String = TestFunc(0) ' und jetzt ist es ein Zeichen Dim c1 = TestFunc()(0)
Gruß Elmar
- Als Antwort markiert Stefan Hoffmann2 Donnerstag, 18. Juli 2013 07:50
Alle Antworten
-
Stefan,und was hast Du als 2. Funktionsdeklaration, also wenn Du den Pfeil nach unten klickst ?
Hannes
If you have got questions about this, just ask.
In a perfect world,
users would never enter data in the wrong form,
files they choose to open would always exist
and code would never have bugs.
My Forum Threads -
Da du einen String zurückbekommst, kann dieser auch umgedeutet werden als Char-Array. Und in dem Fall wäre in der Klammer der Index des Zeichens zu finden.
Gibst du also tstfunc() an, ist es einfach dein kompletter Returnwert,
nimmst du hingegen tstfunc(0), ist es nur das erste Zeichen von eben diesem Stringwert.
Also eigentlich alles korrekt im VS. ;-)
Und dass das bei Integer, Double oder Object nicht klappt, ist umgekehrt auch klar.
LG, Dennis.
EDI Consultant/Developer
Ich nutze meistens VB6 und VS2005 bis VS2012
Bitte die Antworten sowie weitere hilfreiche Beiträge von Mitgliedern markieren. Vielen Dank.
- Als Antwort vorgeschlagen Heslacher Mittwoch, 17. Juli 2013 08:50
- Als Antwort markiert Stefan Hoffmann2 Donnerstag, 18. Juli 2013 07:50
-
wenn ich die funktion ändere zu:
Private Function tstfunc(d As Double) As Integer Return "test" + d.ToString End Function
wird aber nichts mehr vorgeschlagen.
und bei
Private Function tstfunc() As Char() Return {"a"c, "b"c, "c"c} End Function
auch nicht.
Schon etwas seltsam.
-
Hallo,
nein nicht nur "normal" bei Visual Basics Mehrfach-Verwendung von runden Klammern.
Zum einen kennhzeichnet () eine Methode (Prozedur/Funktion) ohne Parameter - und ist optional, auch wenn das nicht zur Lesbarkeit beiträgt.
Zum anderen werden runde Klammen auch für den Zugriff auf indizierte Eigenschaften (Indexer) verwendet - bei String ist das die Chars Eigenschaft.
Und so ergibt sich folgendes Sammelsurium:
Dim s1 As String = TestFunc() Dim s2 As String = TestFunc()(0) ' Geht auch sollte man aber der Klarheit zu liebe vermeiden Dim s1bad As String = TestFunc Dim s2bad As String = TestFunc(0) ' und jetzt ist es ein Zeichen Dim c1 = TestFunc()(0)
Gruß Elmar
- Als Antwort markiert Stefan Hoffmann2 Donnerstag, 18. Juli 2013 07:50
-
Das Problem ist, dass VB es einem versucht einerseits einfach zu machen (und vermeindlich überflüssige Klammern weglässt), andererseits versucht dir zu unterstellen, es erstmal richtig gemacht zu haben. Wenn du also ein testfunc(0) angibst, sieht VB zwar, dass testfunc eigentlich parameterlos ist, aber einen String zurückgibt, der wiederum als Eigenschaft hat, dass man mit einem Index direkt einzelne Zeichen des Strings zugreifen kann. Also gibt es keinen Fehler, obwohl strenggenommen dein Aufruf dann testfunc()(0) heißen müsste, sprich Testfunc ohne Parameter aufrufen, und von diesem String-Wert (zweite Klammer) dann das 0. Zeichen. Siehe auch Elmars Beispiele ...
Und wie Elmar bereits schrieb, fördert das nicht immer die Lesbarkeit. C# ist da, zum Glück, etwas strenger.
Da andere Variablentypen diesen Index nicht mitbringen, bekommst du da auch keinen zweiten Vorschlag. Und in deinem Beispiel mit dem CharArray als Rückgabe funktioniert es natürlich auch nicht, da ein CharArray nicht automatisch ein String ist und auch nicht automatisch als solcher behandelt wird. Ein String ist aber immer quasi auch ein CharArray.
LG, Dennis.
EDI Consultant/Developer
Ich nutze meistens VB6 und VS2005 bis VS2012
Bitte die Antworten sowie weitere hilfreiche Beiträge von Mitgliedern markieren. Vielen Dank.