Hallo und
Grundsätzlich ist klar: new wird benutzt, um ein neues Objekt zu erzeugen, d.h. eine Instanz dieser Klasse. Es gibt Sonderfälle mit anderen Wegen, um ein neues Objekt zu bekommen, und es gibt Vereinfachungen.
Zu deinen Beispielen im einzelnen: Ob die Deklaration mit der Erstzuweisung in einer Zeile steht oder in zwei Zeilen getrennt wird, ist völlig nebensächlich. Andere Programmiersprachen (z.b. Delphi) verlangen, dass die Deklaration an einer speziellen Stelle steht; es wird auch oft empfohlen, alle verwendeten Variablen am Anfang eines Blocks gesammelt zu deklarieren.
C#-Quelltext
1: 2:
| KlasNam neuesObjektvonKlasNam; neuesObjektvonKlasNam = irgendeinAnderesObjektKlasnam; |
Hier wird kein neues Objekt erzeugt! Das Objekt, das unter dem letzten Namen existiert, wird nur der anderen Variablen zugewiesen. Es handelt sich als um ein und dasselbe Objekt, das unter zwei verschiedenen Namen benutzt werden kann.
C#-Quelltext
1: 2: 3: 4:
| string zeichenkette = new string("blabla"); string irgendNenWort; IrgendNenWort = "hallo"; |
Strings sind ein Sonderfall: Sie sind zum einen eine normale Klasse mit vielen Konstruktoren; zum anderen können sie ähnlich wie ein Datentyp (Werttyp) verwendet werden. Das erste Beispiel arbeitét explizit mit einem Konstruktor, das zweite mit einer direkten Zuweisung, die implizit einen Konstruktor aufruft.
Für Arrays von grundlegenden Datentypen gilt Ähnliches: Bei direkter Zuweisung von Werten wird implizit ein Array erzeugt.
Es gibt noch eine weitere Situation, in der eine Methode einer (anderen) Klasse dazu verwendet wird, ein Objekt zu erzeugen und zurückzugeben.
C#-Quelltext
1: 2:
| string [] sArr = new string [] { "a", "bc", "def", "ghij" }; string result = String.Join("|", sArr); |
Die Methode String.Join bekommt einen String und ein String-Array und erzeugt einen neuen String.
Hegmeg hat folgendes geschrieben : |
Wann genau muß ich new verwenden, wann kann ich, wann sollte ich? |
Du musst es immer dann verwenden, wenn du explizit eine neue Instanz einer Klasse erzeugen willst. Alle anderen Beispiele haben nichts mit dieser Frage "eine neue Instanz einer Klasse erzeugen" zu tun.
Ich hoffe, ich konnte etwas Klarheit verschaffen.
Gruß Jürgen
/Nachtrag
Zitat: |
Sonst wäre der Konstruktor von neuesObjektvonKlasNam nicht aufgerufen worden und somit auch keine Instanz erzeugt worden.
Wo habe ich denn meinen Denkfehler?  |
Wichtig ist an dieser Stelle nicht, dass der Konstruktor von neuesObjektvonKlasNam aufgerufen wird, sondern der Konstruktor von KlasNam. Wenn irgendeinAnderesObjektKlasnam als ebensolches Objekt erzeugt worden ist, kann dieses Objekt dem Namen (!) neuesObjektvonKlasNam zugewiesen werden. Du solltest dich noch genauer über Klasse, Objekt, Instanz, Variable (und wohl auch "Referenz" bzw. Adresse im Arbeitsspeicher) informieren.