string



  • WTF schrieb:

    loks schrieb:

    Tipp: Setz Dich mal mit dem Konzept des SOM (Singlerooted Object Model) auseinander, denn anderes als C++ folgt C# diesem Ansatz.

    Google liefert zu "Single Rooted Object Model" ganze drei Treffer. Wie lautet der Name also wirklich?

    Single Rooted Object Model. Sorry das ich mein Wissen auch aus klassischen Büchern beziehe. Es bedeuted nichts anderes als das alle Klassen von einer gemeinsamen Basisklasse (im Falle von C# object) erben. C++ hat das nicht, bei Java wurde es halbherzig eingeführt, existieren tut das Konzept sein Smalltalk und C# hat es konsequent umgesetzt, hier ist alles ein Objekt.



  • loks schrieb:

    Es bedeuted nichts anderes als das alle Klassen von einer gemeinsamen Basisklasse (im Falle von C# object) erben. C++ hat das nicht, bei Java wurde es halbherzig eingeführt, existieren tut das Konzept sein Smalltalk und C# hat es konsequent umgesetzt, hier ist alles ein Objekt.

    Tja, gut, alles ist ein Objekt. Aber das bedeutet noch lange nicht, alles ist ein String. Es hat zwar jede Klasse die ToString-Methode sowie einige weitere grundlegende Funktionen. Aber das rechtfertigt für mich immer noch nicht, dass man jedes Objekt an einen String heften kann und der dann implizit ToString aufruft. Zumal das nur bei der Verkettung mit einem vorhandenen String geht, nicht aber bei der generellen Neuzuweisung eines Strings:

    string s = "..." + new object(); // Funktioniert.
    string s = new string(new object()); // Funktioniert nicht.
    

    Zumal in der ToString meistens sowieso nur der Klassenname, also eine systeminterne Information, steht.

    Somit seh ich, ehrlich gesagt, nicht den Zusammenhang zwischen dem Prinzip, dass alles ein Objekt ist, und der Idee, speziell bei der Stringaddition (aber nicht bei der Stringzuweisung!) jegliche Typen zuzulassen und dann die ToString-Methode zu nehmen. Auch hat die Idee, dem Objekt eine ToString-Methode zu geben, nichts mit dem Single Rooted Object Model zu tun. Zufälligerweise hat C# beides gemacht: SROM und eine ToString-Methode in object. Aber an sich sind das doch zwei paar Schuhe. Man könnte SROM auch anwenden, ohne dass object ein ToString besitzt. Somit kann man diesen merkwürdigen Additionsoperator in string, der ein object statt einen string entgegen nimmt, nicht mit SROM begründen. Weil alles auch dann noch ein Objekt wäre, wenn object keine ToString-Funktion hätte.
    Wie gesagt, man kann ja auch nicht jeden Typen auf int addieren. Und das, obwohl GetHashCode noch viel eher ein einzelnes Objekt repräsentiert als ToString, welches, wenn es nicht überschrieben wird, nur Informationen zur Klasse liefert.



  • WTF schrieb:

    loks schrieb:

    Es bedeuted nichts anderes als das alle Klassen von einer gemeinsamen Basisklasse (im Falle von C# object) erben. C++ hat das nicht, bei Java wurde es halbherzig eingeführt, existieren tut das Konzept sein Smalltalk und C# hat es konsequent umgesetzt, hier ist alles ein Objekt.

    Tja, gut, alles ist ein Objekt. Aber das bedeutet noch lange nicht, alles ist ein String. Es hat zwar jede Klasse die ToString-Methode sowie einige weitere grundlegende Funktionen. Aber das rechtfertigt für mich immer noch nicht, dass man jedes Objekt an einen String heften kann und der dann implizit ToString aufruft. Zumal das nur bei der Verkettung mit einem vorhandenen String geht, nicht aber bei der generellen Neuzuweisung eines Strings:

    string s = "..." + new object(); // Funktioniert.
    string s = new string(new object()); // Funktioniert nicht.
    

    Zumal in der ToString meistens sowieso nur der Klassenname, also eine systeminterne Information, steht.

    Somit seh ich, ehrlich gesagt, nicht den Zusammenhang zwischen dem Prinzip, dass alles ein Objekt ist, und der Idee, speziell bei der Stringaddition (aber nicht bei der Stringzuweisung!) jegliche Typen zuzulassen und dann die ToString-Methode zu nehmen. Auch hat die Idee, dem Objekt eine ToString-Methode zu geben, nichts mit dem Single Rooted Object Model zu tun. Zufälligerweise hat C# beides gemacht: SROM und eine ToString-Methode in object. Aber an sich sind das doch zwei paar Schuhe. Man könnte SROM auch anwenden, ohne dass object ein ToString besitzt. Somit kann man diesen merkwürdigen Additionsoperator in string, der ein object statt einen string entgegen nimmt, nicht mit SROM begründen. Weil alles auch dann noch ein Objekt wäre, wenn object keine ToString-Funktion hätte.
    Wie gesagt, man kann ja auch nicht jeden Typen auf int addieren. Und das, obwohl GetHashCode noch viel eher ein einzelnes Objekt repräsentiert als ToString, welches, wenn es nicht überschrieben wird, nur Informationen zur Klasse liefert.

    Ach fick Dich doch ins Knie. Schwachmaten wie Du sind eigendlich die Zeit nicht wert die solche Postings bringen...



  • Erstemal das ich die Kritik von WTF gar nicht sooo doof fand.
    Ich weiss zwar nicht wie man da Probeme mit kriegen kann, aber das der +Op. Object annimmt, ist eigentlich wirklich...mmmh..ich sag mal überflüssig.
    Wenn man den Programmierer zwingen würde da selber ein ToString() einzufügen, wäre das auch okay gewesen.



  • Hallo,

    Vielleicht kann ich zur allgemeinen Verwirrtheit nen bissle was beitragen 🙂

    Die Stringklasse definiert überhaupt gar keinen Additionsoperator.

    Alle schimpfen hier über das Verhalten eines Operators den es gar nicht gibt...
    Der Compiler ersetzt alle Vorkommen von + einfach durch Aufrufe der Funktion String.Concat. Das ist ein reines Compilerfeature. Und String.Concat erlaubt nunmal, wie es in der Doku steht, das Zusammenfügen von String + der Stringrepräsentation von Objects. Von daher ist das Verhalten zumindest nicht unerwartet da es genau so in der Doku beschrieben ist.

    Die Frage nach dem "Warum?" kann man natürlich trotzdem stellen.

    Eine Sache ist die, dass Operanden von Operatoren vertauschbar sein sollten. Also objectO + stringS sollte ebenso möglich sein wie stringS + objectO. Das hieße aber, dass für Object ein + Operator definiert werden muss der Strings akzeptiert. Das müsste man auch für alle anderen vorstellbaren Datentypen machen. Das das kaum sinnvoll ist weil dadurch die Basisklasse von abgeleiteten Klassen abhängig wird sollte einleuchten. Totzdem ist es in manchen Situationen schöner Strings mit Objects zu addieren ohne ToString() manuell aufrufen zu müssen. Also bedient man sich der, in der String Klasse vorhandenen, Concat Funktion und umgeht damit das Problem in Object Operatoren definieren zu müssen.

    Es kam auch die Frage auf warum die String Klasse keinen Konstruktor hat der Objects annimmt. Gegenfrage: Was sollte der machen was ToString() nicht macht? Wie schon von anderen gesagt existiert ToString in jeder klasse durch Object als Basis aller klassen und von daher ist so ein Konstruktor einfach unnötig.



  • loks schrieb:

    ...

    Unabhängig davon, das WTF auf ein Feature rumreitet das er nicht ändern können wird, muss man wirklich nicht beleidigend werden.



  • loks schrieb:

    Ach fick Dich doch ins Knie. Schwachmaten wie Du sind eigendlich die Zeit nicht wert die solche Postings bringen...

    Juhu, ich hab die Diskussion gewonnen! 🕶

    ωτƒ ι∫ ∫τιζζ τεΠ ΛΛ-α-π ➡ man: WTF

    ωιππΣΓ∫ δσπ'τ μ∫Σ δΓμ👎∫.

    lol lol lol lol lol

    is old
    

    Google: your mom 1/2=51/2=5

    was created as a half-ass job
    
    is just worse C# code
    

    🙂 😃 😉 😞 :p [][/]

    [e]Theta[/e] [e]Psi[/e]
     [e]cap[/e]-|  --> Neptun
     [e]int[/e] |
    [e]asymp[/e][e]asymp[/e][e]asymp[/e]
    

    Und jetzt verrate ich euch noch was: Das ganze war nur inszeniert. loks und ich, wir sind dieselbe Person. 💡
    pwned you all, you b00ns and 1337-hax0rs and

    / |/ |´\ | |´\ ---   |/ | |\  |\  | |´ /
    \ |  |_/ | |_/  |    |  | | | | | | |- \
    / |\ | \ | |    |    |\ | |/  |/  | |_ /
    


  • Schon Scheiße wenn man keine Freunde hat die mit einem spielen und man muss hier Rollenspiele veranstalten.

    Eine Selbsthilfegruppe wäre bestimmt nicht das schlechteste für Dich (Euch).
    Habt ihr beide schon mal darüber nachgedacht?🙄

    Setzte euch doch nochmal zusammen und redet mal darüber…

    Aber zum andern Thema.
    Ist mir damals in meiner Laufbahn zu Basic auch sauer aufgestoßen.

    textBox = "Text"
    

    Funzt…?

    Es wird an Text oder damals noch „Caption“ übergeben.

    Leb halt damit...

    Tschüß

    Wünsch Euch beiden noch einen schönen Tag und geht mal wieder ein Bier zusammen trinken und redet mal wieder über alte Zeiten. 😉



  • Doug_HH schrieb:

    Wünsch Euch beiden noch einen schönen Tag und geht mal wieder ein Bier zusammen trinken und redet mal wieder über alte Zeiten. 😉

    Irgendwie fällt mir dazu nur ein: 9 von 10 Stimmen in meinen Kopf meinen, das ich nicht verrückt bin, die 10te pfeift...



  • Kindergarten


Anmelden zum Antworten