Hallo,
leider habe ich aktuell kein Beispiel vorliegen aber ich bin schon öfters über solchen Code gestolpert:
private void myButton_Click(object sender, EventArgs e)
{
string[] myArray = new string[] { "1", "2", "3" };
DoSomething(ref myArray);
}
private void DoSomething(ref string[] arr)
{
/* do something with arr */
}
In diesem Beispiel macht der ref Parameter keinen Sinn. Meine konkrete Frage:
Ist das einfach "schlecht" programmiert oder gibt es Anwendungsfällen indem man einen Referenztyp mit ref übergeben sollte?
Der Unterschied dabei ist doch nur das man ohne ref eine Kopie der Referenz und mit ref genau die eine Referenz übergibt oder irre ich mich?
nicky
Hi,
doch ref macht auch bei Referenztypen Sinn:
private void DoSomething(ref string[] arr)
{
arr = new string[] { "a", "b", "c" };
}
Nun vergleiche mal diese Version mit der deinigen (ohne ref):
string[] myArray = new string[] { "1", "2", "3" };
DoSomething(ref myArray);
string newArray = myArray;
Achso, verstehe. Macht also Sinn wenn ich der ursprünglichen Referenz in der Methode einen neuen Speicherbereich zuweisen will.
PS: Es muss
string[] newArray = myArray;
heißen.
Danke!
Hallo nicky
Es gibt im Forum einen Artikel über dieses Thema.
Darunter findest du noch ein Blogpost, den ich geschrieben habe.
Ich denke mit diesen beiden sollten keine Fragen mehr offen bleiben.
Die Entwickler von C# haben sich schon was dabei gedacht und bauen meist keine unvernünftige Features ein, meist.
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.1 und 1.1.