29.04.2014 Aufrufe

Leseprobe

Leseprobe

Leseprobe

MEHR ANZEIGEN
WENIGER ANZEIGEN

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);

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!