Announcement

Collapse
No announcement yet.

String vs. string

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • String vs. string

    Hallo!
    Ich sehe grade zum ersten mal C# Code und bin erfreut, dass es fast Java ist

    Ich frage mich allerdings was der Unterschied zwischen string und String (z.B.) sein soll. Oder ist das nur eine Inkonsistenz in Sachen Groß-Kleinschreibung?

  • #2
    Hallo,

    kurz: es ist das gleiche.

    System.String ist die Klasse die CLS (dem Standard) konform ist.
    string ist das C# synonym für System.String.

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Danke für die Antwort!
      Finde das aber irgendwie.... mh... nett ausgedrückt, komisch.

      Comment


      • #4
        Ja, das geht noch weiter:

        int -> System.Int32
        long -> System.Int64
        float -> System.Single
        ...

        Es wird wohl daher kommen dass ... es von Mircosoft ist.
        int einfacher zu schreiben ist als System.Int32, usw. und deshalb auch für System.String (oder bei Einbindung von System als Namespace nur String) die gleiche Syntax wie für int verwendet wird.

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          dass es fast Java ist
          Finde das aber irgendwie.... mh... nett ausgedrückt, komisch.
          Nicht wirklich, oder?

          Long -> long
          Boolean -> boolean
          Integer -> int
          in Java
          Christian

          Comment


          • #6
            Also das mit int, long usw. seh ich ja noch ein.
            Hätte auch keine Lust immer System.Int32 zu schreiben.

            Aber ich kann doch ein Variable mit:
            String s1 = "";
            deklarieren.

            Wieso muss ich es auch noch mit:
            string s2 = "";
            können?

            Finde es komisch, dass man dafür auch noch ein Synonym braucht.

            Comment


            • #7
              Wenn du von Java kommst, solltest da folgendes wissen:

              In .net sind Klassen schon auf ebene der VM realisiert. Das heißt, jede .net-Sprache benutzt als int dieselbe Klasse System.Int32.
              Um c# aber mehr wie c++ oder Java aussehen zu lassen, hat man reservierte Wörter für die üblichsten Datentypen eingefürt, die normalerweise nicht auf VM-Ebene realisiert sind. Bei Java z.B. ist ja int und System.lang.Integer unterschiedliche Dinge.

              Auch VB hat eigene namen für "seine" Datentypen.

              Gruß Holger.

              Comment


              • #8
                Bei C# bin ich mir nicht sicher, aber bei Java heist man das ganze Wrapper Klassen. DOrt gibts eben noch OO Untypisch Ordinaltypen (quasi ein Atomares Teilchen, welches kein Objekt darstellt). Damit man diese aber auch als Objekt benutzen kann gibts in Java eben noch für den Ordinaltyp "string" die Wrapperklasse "String" usw.

                Bisher bin ich davon ausgegangen, dass es in C# tatsächlich keine Ordinaltypen mehr gibt, weshalb es dort tatsächlich nur um eine Bequemes Feature handelt, und die Wrapperklassen eigentlich... nunja unnötig sind. Natürlich kanns auch sein, dass C#, bzw. .NET schon seit begin Autoboxing betreibt, und sich deshalb "string" wie "String" benutzen lässt. (Java kann das seit 5.0 im übrigen auch). Man möge mich korrigieren wenn ich falsch lieg, oder bestätigen ;-).

                P.S: Ordinaltypen werden auch oft als "primitiver Datentyp" bezeichnet
                Just be DRY and KISS your customers.

                Comment


                • #9
                  Autoboxing betreibt, und sich deshalb "string" wie "String" benutzen lässt.
                  der Compiler übersetzt es richtig -> zur Laufzeit sind beide ident.

                  Beweis:
                  Schau den IL-Code an.

                  Bsp:
                  [highlight=c#]
                  using System;

                  namespace ConsoleApplication1
                  {
                  class Program
                  {
                  static void Main(string[] args)
                  {
                  string s1 = "a";
                  String s2 = "b";

                  Console.WriteLine(s1.GetType());
                  Console.WriteLine(s2.GetType());
                  Console.ReadKey();
                  }
                  }
                  }
                  [/highlight]
                  Beide Typen sind gleich und entsprechen System.String

                  mfG Gü
                  "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                  Comment


                  • #10
                    Ich habe dann doch nochmal nachgeforscht.. es ist tatsächlich so, dass C# Autoboxing/-unboxing betreibt. (Laut diverser Quellen, dann das einzige Feature welches Java von C# übernommen hat..).

                    Das hat aber in der Tat nichts mit dem String und string im Anfangsposting zu tun. System.String ist der Klassenbezeichner (man beachte die Schriebweise, Klassen sind in .NET immer mit großem Anfangsbuchstaben geschrieben), und string ist eben ein Sprachspezifischen Schlüsselwort. Wie gfoidl bereits erkannt hatte, sind beide identisch und unterscheiden sich lediglich in der Schreibweise. Gleiches gilt auch für int und int32 und die ganzen anderen Bezeichner. Übersicht integrierte C# Typen

                    Hinweis:
                    Wem's aufgefallen ist: int32 ist mit kleinem Anfangsbuchstaben geschrieben. Wer jetzt denkt: Aber gerade sagte er Klasse werden doch groß geschrieben?.. Richtig, es handelt sich hier auch nicht mehr um eine Klasse, sondern um einen Werttyp, eine Klasse ist aber ein Verweistyp, weshalb Microsoft sich wohl entschieden hat eine andere Schreibweise zu benutzen.
                    Just be DRY and KISS your customers.

                    Comment


                    • #11
                      Autoboxing/-unboxing betreibt
                      Boxing/Unboxing ist der korrekte Terminus - ist nichts neues.

                      Das hat aber in der Tat nichts mit dem String und string im Anfangsposting zu tun. System.String ist der Klassenbezeichner (man beachte die Schriebweise, Klassen sind in .NET immer mit großem Anfangsbuchstaben geschrieben), und string ist eben ein Sprachspezifischen Schlüsselwort. Wie gfoidl bereits erkannt hatte, sind beide identisch und unterscheiden sich lediglich in der Schreibweise. Gleiches gilt auch für int und int32 und die ganzen anderen Bezeichner.
                      Auch nichts neues - wurde bereits alles abgehandelt

                      int32 ist mit kleinem Anfangsbuchstaben geschrieben
                      int wird klein geschrieben. Int32 wird groß geschrieben. In VB.net ist wurscht, da nich case-sensitive. Forsch nochmal nach - üblicherweise werden in der Forschung die Referenzen der Quellen angegeben.

                      mfG Gü
                      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                      Comment

                      Working...
                      X