Moin!
In verschiedenen Threads ist ja die Diskussion über Referenzen ausgebrochen...
Ich möchte nicht weiter in themenfremden Threads darüber diskutieren, deshalb hier der neue Thread!
Immer wieder lese ich, daß eine Referenzübergabe gegen objektorientierte Programmierung verstößt! 8o
Habe ich denn immer etwas falsch verstanden? Kann ich denn gar nicht objektorientiert denken???
Bsp:
Wenn ich meinen konkreten Apfel(myApfel = newApfel()) in Deine Hände lege und Du abbeißt (Du.beisstAb(myApfel)), dann ist mein Apfel kleiner geworden und es wurde nie von einer Kopie meines Apfels abgebissen.
Das ist die Nachbildung der realen Welt, das ist in meinen Augen OOP.
Liege ich da so falsch?
Gruß
Jürgen
ne, ne, ne
es läuft so:
myApfel = newApfel();
Du.nimmst(myApfel);
Du.rennst_schnell_zu_netto_mit(myApfel);
Netto.gibt_dem_lieferantgaertner_einen_auftrag_eine_kopie__zuerstellen_von(myApfel);
Lieferantgaertner.pflanzt_einen_baum_als_kopie_von(myApfel);
Baum.waechst();
System.Threading.Thread.Slep(100000000....000000000000);
Lieferantgaertner.liefert_an_netto(myApfel, myApfelKopie);
Netto.gibt_dir(myApfel, myApfelKopie);
Du.beisstAb(myApfelKopie); // 8o
Du.gibst_mir(myApfel);
und alle sind zu frieden!! 😁
Gut! Das widerspricht nicht meinem Verständnis von OOP! 😉
Aber ich befürchte ein Prob wegen des Sleeps... Das sollte in einem Extra-Thread passieren, damit am Ende auch myApfel.isVerfault = true ist. 😁
Gruß
Jürgen
nein ich bin nicht zufrieden !
du hast bei
Du.beisstAb(myApfelKopie) ";" vergessen. tsts 😁
gruß,
r00t
posted by the real prince of persia
Wenn ich ned will, dass in ner Methode meine Referenz
verändert wird, dann übergeb ichs halt so:
Apfel myApfel = new Apfel();
Du.BeisstAb(new Apfel(myApfel));
Muss man halt nen Kopier Konstruktor bereitstellen,
aber das ist ja kein Problem.
Ist daran irgendwas falsch ? Oder warum machen manche
ne Kopie in ne Struktur oder ähnliches ?
btw: Finde es blöd, dass const in C# nicht das selbe bewirkt,
wie in C++, auch wenn mans da wegcasten konnte ..
greetz
eine kleine bemerkung:
der copy-constructor soll in .net eigendlich nicht mehr verwendet werden...
...stattdessen gibt es die schnittstelle 'IClonable', welche die implementierung der methode 'Clone()' vorschreibt.
hiermit sollen in .net tiefe kopien erzeugt werden.
grtz
chief
Wenn ich auf den anderen Thread schiele, fällt mir leider auf, das viele keinerlei Ahnung von Referenzierung und dem Umgang damit haben.
Und leider auch nicht warum man das macht.
Das finde ich (gelinde gesagt) erschreckend....
Original von Ftee
Wenn ich auf den anderen Thread schiele, fällt mir leider auf, das viele keinerlei Ahnung von Referenzierung und dem Umgang damit haben.
Denn bin ich ja beruhigt. Ich dachte schon die ganze Zeit, dass ich im falschen Film bin. 8o
ich vermute einfach, dass viele (besonders die aus c/c++ Ecke kommen) die C#-Referenzen mit C/C++ Referenzen, die mit & bei Funktionen gemacht werden, verwechseln.
void func(class1 &cl)
{
…
}
Wobei C#-Referenzen eine Art Pointer sind.