Laden...

Referenztyp mit ref Parameter übergeben? Sinnlos? [==> es gibt sinnvolle Fälle]

Erstellt von nicky vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.605 Views
Thema geschlossen
N
nicky Themenstarter:in
232 Beiträge seit 2011
vor 10 Jahren
Referenztyp mit ref Parameter übergeben? Sinnlos? [==> es gibt sinnvolle Fälle]

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

771 Beiträge seit 2009
vor 10 Jahren

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;

N
nicky Themenstarter:in
232 Beiträge seit 2011
vor 10 Jahren

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!

5.941 Beiträge seit 2005
vor 10 Jahren

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

Hinweis von herbivore vor 10 Jahren

Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.1 und 1.1.

Thema geschlossen