Feedback

C# - Call by Reference - OUT

Veröffentlicht von am 27.04.2006
(1 Bewertungen)
Funktioniert genau wie Call by Reference, mit dem Unterschied das die Adressen der Übergabeparameter vor der Übergabe nicht initialisiert werden brauchen.
GFU-Schulungen  [Anzeige]

C# Grundlagen

Die Schulung vermittelt Ihnen die Grundlagen von C# in der Arbeit mit Datentypen sowie bei Klassenbibliotheken. Sie lernen, mit Variablen umzugehen und deren verschiedene Formen zu konvertieren. 

C# 2017/2015/2013 Grundlagen

Nach Abschluss des Kurses sind Ihnen die Datentypen und Klassenbibliotheken von C# bekannt. Außerdem sind Sie in der Lage, mit Variablen umzugehen und deren Typen zu konvertieren. Sie definieren Namespaces und setzen diese ein, Sie erstellen eigene Klassen  und bauen Trouble Shooting ein.

/* Beide Zahlen werden angelegt, dann werden beide Zahlen als Adresse an die Funktion CallByReferenceOUT übergeben,
 * dort werden diese Wertte bearbeitet, sie brauchen nicht zurückgegeben werden weil sie dort bearbeitet werden wo sie gerade
 * sind, im Speicher 
 * Besonderheit: die Adressen können übergeben werden ohne das die vorher initialisiert werden müssen
 */

private void button3_Click(object sender, System.EventArgs e)
{
	int Zahl1;
	int Zahl2;

        CallByReferenceOUT(out Zahl1, out Zahl2);

	textBox11.Text = Zahl1.ToString();
	textBox8.Text = Zahl2.ToString();
}

private void CallByReferenceOUT (out int Zahl1, out int Zahl2)
{
	Zahl1 = 1;
	Zahl2 = 2;
}
Abgelegt unter reference, out, pointer, Parameterübergabe.

1 Kommentare zum Snippet

nqfe schrieb am 26.02.2009:
Ganz so wie bei der Übergabe von ref Parametern ist es nun doch nicht.
Out Parameter müssen wie im obigen Beispiel beschrieben zwar nicht initialisiert werden. Bei einer Initialisierung kann aber im Gegensatz zu ref Parametern nicht auf den Wert zugegriffen werden.
Folgendes geht nicht.

static void Main(string[] args)
{
Int32 intZahl=123;
foo(out intZahl);
Console.Write(intZahl);
}

static void foo(out Int32 bar)
{
Console.Write(bar); //lesend zugreifen nicht möglich
}
}


Ebenso müssen bei Einsatz von out Parametern diese innerhalb der Methode initialisiert (zugewiesen) werden.

static void Main(string[] args)
{
Int32 intZahl;
foo(out intZahl);
Console.Write(intZahl);
}

static void foo(out Int32 bar)
{
Console.Write("Hallo");
//Fehler: fehlende Zuweisung von bar
}
}
 

Logge dich ein, um hier zu kommentieren!