Wann "new" verwenden C#

Gast #2118590
Lesenswert?

Hallo,
folgendes Bsp. aus der msdn:
http://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener.aspx
Da wird einmal ein Objekt so erstellt:

TcpListener server=null;
server = new TcpListener(localAddr, port);

Und der TcpClient dann so:

TcpClient client = server.AcceptTcpClient();

Warum brauche ich bei dem client den "new" Operator nicht?

Gruß
Gast #2118636
Lesenswert?

Ok das macht Sinn - trotzdem noch eine Frage:
Mit TcpClient client erstelle ich was? Anscheinend ja noch kein Objekt?
So wie ich das bisher verstanden habe brauchts für die Objekterstellung 
noch einen Konstruktor.
Gast #2118646
Lesenswert?

Mh das ist für mich als Laie etwas unverständlich - kann ich generell 
sagen, dass ich client erst verwenden kann, wenn ich ihm entweder wie im 
vorliegenden Fall ein Objekt zuweise oder aus client mit einem 
Konsturktor ein Objekt erstelle?
Gast #2118647
Lesenswert?

Volker Zabe schrieb:
> "client" wird wahrscheinlich nur innerhalb einer Funtion verwendet. Also
> wird es auf dem Stack gepackt, wie alle lokalen Variablen/Objekte.
> "server" erzeugst du mit "new" auf dem Heap. So "überlebt" es die
> Funktion in der das Objekt erzeugt wurde.
nein diese Trennung gibt es in c# nicht mehr


man könnte auch schreiben TcpClient client = new TcpClient();

aber dies geht nur syntaktisch und nicht von der logik. Denn der Client 
muss ja von der Server erstellt werde wo die verbindung angekommen ist.

Sharper schrieb:
> Mit TcpClient client erstelle ich was? Anscheinend ja noch kein Objekt?
> So wie ich das bisher verstanden habe brauchts für die Objekterstellung
> noch einen Konstruktor.

du legst einfach eine Variable vom Type TcpClient an und dort speicherst 
du das object was server.AcceptTcpClient(); zurückliefert rein.
#2118958
Lesenswert?

Sven P. schrieb:
> Ja eben.
>
> Eigentlich sollte man bei Verwendung von 'new' doch erkennen, dass man
> mit einem Zeiger herumhantiert, was dort aber nicht der Fall ist, weil
> irgendein Typedef den Zeiger versteckt.

???
Es ist nicht C/C++, es gibt keine C/C++ typedefs und es gibt keine 
Zeiger (außer man will/muss unbedingt unsafe nutzen).
Der Operator new erzeugt nur ein neues Objekt (und ruft den Konstruktor 
auf) und gibt eine Referenz auf das neue Objekt zurück.
Gast #2119479
Lesenswert?

Sven P. schrieb:
> Asche auf mein Haupt, ich überlas das 'C#' im Titel.
> Immerhin, man sieht, die Verwirrung trifft einen C/C++-Menschen schwer
> :->

Immer mal wieder zwischen C, C++, C# und Java hin- und herwechseln, 
vielleicht auch mal Perl einstreuen. Und ganz schnell wundert Dich 
garnix mehr... =8^)
Gast #2119545
Lesenswert?

Normalerweise bereitet mir das keine Probleme. Kritisch wirds nur immer 
dann, wenn eine Sprache von einer anderen Sprache klaut, zum Beispiel 
ein syntaktisches Konstrukt. Das sieht dann exakt gleich aus und meint 
etwas völlig anderes.

Grad hier, wo man doch eigentlich Speicherlöcher vermeiden will, ist das 
m.M.n. sehr gefährlich für Programmierer, die auch noch C/C++ sprechen. 
In Hardware verbaut man ja auch unterschiedliche Steckerarten, damit 
niemand etwas falsch verkabelt...
#2119850
Lesenswert?

Sven P. schrieb:
> Normalerweise bereitet mir das keine Probleme. Kritisch wirds nur immer
> dann, wenn eine Sprache von einer anderen Sprache klaut, zum Beispiel
> ein syntaktisches Konstrukt. Das sieht dann exakt gleich aus und meint
> etwas völlig anderes.

new gab's schon bei Smalltalk und Simula, geklaut und die Semantik 
verändert hat hier C++.

> Grad hier, wo man doch eigentlich Speicherlöcher vermeiden will, ist das
> m.M.n. sehr gefährlich für Programmierer, die auch noch C/C++ sprechen.

Das liegt an C/C++ und am Programmierer scnr.

> In Hardware verbaut man ja auch unterschiedliche Steckerarten, damit
> niemand etwas falsch verkabelt...

Warum gibt's dann in C++ nur eine Steckerart?
Gast #2120700
Lesenswert?

So richtig verstanden hast du ja nicht, was ich da sagte, SCNR.

Zumindest in Smalltalk sah das doch syntaktisch eine ganze Ecke anders 
aus. Der C#-Code ginge syntaktisch aber 1:1 als C++-Code durch, meint 
aber was völlig anderes. Wenigstens bei mir stiftet das beim Hingucken 
jedes Mal wieder Verwirrung...
Allerdings nicht nur bei C#, z.B. auch bei PHP muss ich immer wieder 
zweimal hinschauen.

Mag aber alles ein persönlicher Eindruck sein, natürlich.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren