Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
70<br />
Methoden<br />
Moment mal. Was geschieht bei der Übergabe eines string-Wertes oder eines<br />
beliebigen anderen Objekts? Geht es da nicht per se um Referenzen? Ganz recht.<br />
Hier sollte ich also meine zuvor gemachte Aussage relativieren: Für manche<br />
Datentypen heißt Wertübergabe: Übergabe einer Kopie der Referenz auf den<br />
Wert. Um etwas weiter auszuholen: Bei COM ist alles und jedes eine Schnittstelle,<br />
und jede Klasse kann eine oder mehrere Schnittstellen haben. Eine Schnittstelle<br />
ist nicht mehr und nicht weniger als eine Sammlung von Funktionszeigern;<br />
Daten enthält sie nicht. Das Kopieren einer solchen Zeigersammlung wäre<br />
schlichte Platzverschwendung, weshalb eine Methode bei der Wertübergabe<br />
lediglich die Startadresse dieser Sammlung zu sehen bekommt – also die Information,<br />
die auch der Aufrufer hat.<br />
Referenzparameter<br />
Mit Eingangsparametern und direkten Funktionsergebnissen lässt sich zwar<br />
bereits eine Menge anfangen, wenn es allerdings darum geht, den Wert einer Variable<br />
(also den Speicherbereich, der mit dieser Variable assoziiert ist) des Aufrufers<br />
zu verändern, sind die Grenzen erreicht. Für solche Aufgaben sind Referenzparameter<br />
(kurz: ref-Parameter) zuständig:<br />
void MyMethod(ref int nInOut)<br />
Da diese Methode eine echte Variable übergeben bekommt, deren Wert sie jederzeit<br />
lesen (und ändern) kann, muss der Aufrufer für die Initialisierung der Variablen<br />
sorgen. Ansonsten beschwert sich der Compiler. Das folgende Listing zeigt<br />
eine Methode, die mit einem ref-Parameter arbeitet.<br />
Listing 5.2:<br />
Übergabe von Parametern als Referenz<br />
1: // class SquareSample<br />
2: using System;<br />
3:<br />
4: public class SquareSample<br />
5: {<br />
6: public void CalcSquare(ref int nOne4All)<br />
7: {<br />
8: nOne4All *= nOne4All;<br />
9: }<br />
10: }<br />
11:<br />
12: class SquareApp<br />
13: {<br />
14: public static void Main()<br />
15: {<br />
16: SquareSample sq = new SquareSample();<br />
17:<br />
18: int nSquaredRef = 20; // muss initialisiert werden<br />
19: sq.CalcSquare(ref nSquaredRef);