Laden...

Unterschied zwischen string und String

Erstellt von ThomasF vor 15 Jahren Letzter Beitrag vor 15 Jahren 3.210 Views
T
ThomasF Themenstarter:in
89 Beiträge seit 2007
vor 15 Jahren
Unterschied zwischen string und String

Hallo,

was ist eigentlich der Unterschied zwischen string und String bzw. object und Object etc.

I
279 Beiträge seit 2008
vor 15 Jahren

hm gute frage, ich schätze mal das String die Klasse ist und string der Datentyp, funktional gibt es da aber keinen unterschied. oder? ^^

L
862 Beiträge seit 2006
vor 15 Jahren

String ist der Typ vom .NET.

string ist der Typ von C# der aber als Alias für String fungiert.

Ich habe allerdings noch keinen Unterschied festgestellt benutze aber immer die C#-Typen, sprich int, string, short, char... stadt Int32, String, Int16, Char...

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo ThomasF,

string ist ein Schlüsselwort und ein Alias für die Klasse String. Man kann im Prinzip beides beliebig mischen, sollte das aber besser nicht tun, sondern sich für eins von beiden entscheiden.

herbivore

T
ThomasF Themenstarter:in
89 Beiträge seit 2007
vor 15 Jahren

Danke
Thomas

U
1.688 Beiträge seit 2007
vor 15 Jahren

Ein weiteres Beispiel wären übrigens int und Int32.

Man kann im Prinzip beides beliebig mischen, sollte das aber besser nicht tun, sondern sich für eins von beiden entscheiden.

Nur so nebenbei - ich würde gern "String" nehmen, leider bietet aber die Autovervollständigung im Visual Studio immer nur "string" an 🙁 Weiß vielleicht jemand, ob und wie man das beeinflussen kann?

S
53 Beiträge seit 2006
vor 15 Jahren

da hack ich doch gleich mal nach: was ist mit int und Int64?

5.942 Beiträge seit 2005
vor 15 Jahren

Hallo Speeedy

da hack ich doch gleich mal nach: was ist mit int und Int64?

Da gilt dasselbe wie oben beschrieben, ausser das "int" einen "Int32" darstellt und "Int64" einen long Datentyp.
Bevor jetzt noch jemand mit VB.NET kommt, auch dort ist "Integer" und "Int32" dasselbe, usw...

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

U
1.688 Beiträge seit 2007
vor 15 Jahren

da hack ich doch gleich mal nach

Bitte nicht - das ist so brutal.
:evil:

S
443 Beiträge seit 2008
vor 15 Jahren

ich habe in einem Buch mal gelesen:
string ergibt sich wie folgt

namespace MyDataTypes
{
  using myString = System.String;
  public class Klasse
  {
    private myString mMember = "das ist mein string Datentype";
  }
}

sonst ist nichts dahinter, zu Herbivors Aussage, ja man soll immer den gleichen verwenden, auch wenn diese Ideologisch die gleiche Bedeutung haben, ist es für einen ungeübten Leser bei [int] und [Int64] (oder Int32) schon schwieriger zu erkennen ob es das gleiche ist.
System.String ist der "Mutter" Datentyp und die C# Schreibweise (string) wurde auf Wunsch der C Programmierer eingebaut.
Soweit die Lesung aus dem Buch.

mbg
Rossegger Robert
mehr fragen mehr wissen

Montag morgen ist die beste Zeit um eine erfolgreiche Woche zu beginnen

6.862 Beiträge seit 2003
vor 15 Jahren

Nur so nebenbei - ich würde gern "String" nehmen, leider bietet aber die Autovervollständigung im Visual Studio immer nur "string" an

Das ist meiner Meinung nach die bessere Variante. Man sollte immer die Schlüsselwörter der Sprache benutzen um flexibel zu bleiben. Warum erklär ich mal an einem zugegebenermaßen sehr hypothetischen Beispiel 😃

Die Sprache C# an sich ist völlig unabhängig von .Net definiert. Wenn jemand eine alternative Implementierung schreibt für C# und man benutzt die C# Typen string, int etc. da ist man auf der sicheren Seite da auch die alternative Implementierung die vom Sprachstandard vorgesehenen Datentypen bieten muss. Diese müssen aber nicht zwangsläufig auf .Net Typen gemappt werden. Okay, sowohl bei Microsoft als auch Mono ist es natürlich der Fall da, aber es ist theoretisch kein Zwang der durch die Sprache vorgeschrieben wird. Somit könnte es passieren dass ein C# Quellcode nicht auf allen Implementierungen läuft da statt den C# Schlüsselwörter explizit .Net Klassen verwendet wurden.

Wie gesagt, sehr hypothetisches Beispiel da es weder eine alternative C# Implementation ohne .Net gibt, als auch dass wohl kein Programm so simpel ist dass man nicht eh auf externe Klassen (normalerweise die .Net Framework Klassen) zurückgreifen muss und von daher alle bisherigen Programme auf so einer alternativen Implementierung nicht laufen würden.

Mit der Aussage von Spike24 kann ich nicht zustimmen.
String ist der Datentyp für Zeichenketten aus dem .Net Framework, string ist der Zeichenkettendatentyp der im C# Standard definiert wird. Prinzipiell haben die nicht zwangsläufig was miteinander zu tun. Es ist reine Implementierungssache dass die aufeinander gemappt werden. string, int, long etc. wurden nicht einfach für Gewohnheitsprogrammierer aus anderen Sprachen eingeführt.

Baka wa shinanakya naoranai.

Mein XING Profil.

H
116 Beiträge seit 2008
vor 15 Jahren

Da gilt dasselbe wie oben beschrieben, ausser das "int" einen "Int32" darstellt und "Int64" einen long Datentyp.

Ist das so? Ich habe mal gelernt, dass int (in C/C++) den natürlichen Integer der Maschine darstellt, also 32 Bit unter Win32, aber 64 Bit auf 64bittigen Maschinen.

Ist das unter C# anders? Wenn nicht, wäre ein Mix von int und Int32 imho fatal.

Hinrich

U
1.688 Beiträge seit 2007
vor 15 Jahren

Hallo talla,

vielen Dank für die interessanten Gedanken, die ich auch so (fast) akzeptieren kann (s. u.). Ich bin eben aus Borland C++ das Tippen von "String" gewöhnt und da sieht dann natürlich "string" recht unschön aus.

Zu Deinem Beispiel - bezogen auf C# ist das absolut schlüssig. Da Du aber gerade auch ansprichst, dass es ("zufällige") Implementierungssache ist, dass z. B. String und string aufeinander gemappt sind, haben wir doch gleich ein Gegenbeispiel, wenn nämlich eine Anwendung Bibliotheken oder Komponenten benutzt, die in anderen .Net-Sprachen geschrieben wurden. Dann muss ich ja gerade String nehmen, oder?

Aber das Problem ist wohl mindestens genauso hypothetisch...

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo hinrich,

Ist das so?

ja, das ist in C# so, In C++ ist es tatsächlich anderes gelöst.

Hallo talla,

die Überlegung finde ich deutlich zu hypothetisch, um meine Entscheidung davon abhängig zu machen.

EDIT:

In der Programmiersprachen-Spezifikation von C# die Bedeutung von string festgelegt:

The keyword string is simply an alias for the predefined class System.String.

Insofern sind die Überlegungen nicht nur hypothetisch, sondern auch falsch. Zumindest solange sich eine alternative Implementierung von C# nach der Spezifikation richtet und ich denke, das müsste man voraussetzen, wenn man diese neue Sprache immer noch zu Recht als C# bezeichnen können möchte.

herbivore

6.862 Beiträge seit 2003
vor 15 Jahren

Hab ja auch gesagt dass das ne rein hypothetische Betrachtung ist und es keine Rolle spielt momentan.

Das Dokument was du zitierst ist die Spezifikation von der Microsoft Seite oder?
Das bezieht sich ja explizit auf die MS Implementation.

Schaut man sich aber mal den eigentlichen Standard bei der ECMA z.B. an dann gibt es solche Aussagen:

Ecma Technical Committee 39 (TC39) Task Group 2 (TG2) was formed in September 2000, to produce a
standard for C#. Another Task Group, TG3, was also formed at that time to produce a standard for a library
and execution environment called Common Language Infrastructure (CLI). (CLI is based on a subset of the
.NET Framework.) Although Microsoft’s implementation of C# relies on CLI for library and runtime
support, other implementations of C# need not, provided they support an alternate way of getting at the
minimum CLI features
required by this C# standard (see Annex D).

und im genannten Anhang D findet sich dann solche Aussagen:

A conforming C# implementation shall provide a minimum set of types having specific semantics. These
types and their members are listed here, in alphabetical order by namespace and type. und dann folgen so Definitionen wie z.B.

namespace System.Collections
{
  public interface IEnumerator
  {
    public object Current { get; }
    public bool MoveNext();
    public void Reset();
  }
}

Die Sprache C# ist wirklich völlig unabhängig von .Net definiert, aber bedingt ein paar Typen die halt vorhanden sein müssen so dass am Ende was .Net artiges rauskommen muss 😉 Was ja auch nicht verwundert da ja C# für .Net entwickelt wurde. Wenn man sich den Standard mal anschaut kommt genau 2 mal in dem 553 seitigem Dokument der Name .Net vor und das jeweils im Zusammenhang mit der MS Implementation.

Baka wa shinanakya naoranai.

Mein XING Profil.

T
ThomasF Themenstarter:in
89 Beiträge seit 2007
vor 15 Jahren

ich hätte niemals gedacht, dass so eine kleine Frage solch große Wellen schlagen kann.

Danke und Gruß für die detaillierten Darstellungen der C# und .Net Welt.
Thomas

3.971 Beiträge seit 2006
vor 15 Jahren

Das ist meiner Meinung nach die bessere Variante. Man sollte immer die Schlüsselwörter der Sprache benutzen um flexibel zu bleiben.

Ich persönlich finde es besser Int32 direkt zu verwenden, als integer.*Als nicht C#/.NET-ler erkannt man sofort das es sich um 32 Bit Ganzzahl handelt. *Bei einer Umstellung des Frameworks bleiben 32 Bit 32 Bit und das Program bleibt dadurch lauffähig. Bestes beispiel: unter VB6 war ein Integer 16 Bit groß, jetzt unter VB.NET ist er auch 32 Bit groß. Eventuell wird auch bei einer der nächsten CLRs die Bit-Zahl von integer automatisch auf 64 Bit aufgestockt, wer weiß. *Und Int32 ist kürzer als integer auszuschreiben (wenn man nicht VS benutzt)

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

S
443 Beiträge seit 2008
vor 15 Jahren

also ich würde gerne wissen, ob mein Buch CLR via C#, Second Edition richtig liegt oder nicht, bin allerdings nicht im Stande diese Frage zu beantworten

mbg
Rossegger Robert
mehr fragen mehr wissen

Montag morgen ist die beste Zeit um eine erfolgreiche Woche zu beginnen

3.971 Beiträge seit 2006
vor 15 Jahren

Das Buch ist von Jeffray Richter. Berater für Microsoft .NET und Author zahlreicher Bücher Artikel.

Hab das Buch selber nicht gelesen, vllt. werde ich es mir demnächst aber holen...

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

5.742 Beiträge seit 2007
vor 15 Jahren

leider bietet aber die Autovervollständigung im Visual Studio immer nur "string" an

Seltsam - bei mir wird beides angeboten.

Hast du in Optionen zu IntelliSense eingestellt, dass alle Member angezeigt werden sollen?

also ich würde gerne wissen, ob mein Buch
>
richtig liegt oder nicht, bin allerdings nicht im Stande diese Frage zu beantworten

Diese Frage hat herbivore doch beantwortet?!?

In der Programmiersprachen-Spezifikation von C# die Bedeutung von string festgelegt:

The keyword string is simply an alias for the predefined class System.String.