
17 Classes
17.5 Methods
17.5.1 Method parameters
17.5.1.2 Reference parameters
Paragraph 11 A parameter declared with a ref modifier is a reference parameter. 2 Unlike a value parameter, a reference parameter does not create a new storage location. 3 Instead, a reference parameter represents the same storage location as the variable given as the argument in the method invocation.
Paragraph 21 When a formal parameter is a reference parameter, the corresponding argument in a method invocation must consist of the keyword ref followed by a variable-reference (§12.3.3) of the same type as the formal parameter. 2 A variable must be definitely assigned before it can be passed as a reference parameter.
Paragraph 31 Within a method, a reference parameter is always considered definitely assigned. [Example: The example
using System;
class Test
{
static void Swap(ref int x, ref int y) {
int temp = x;
x = y;
y = temp;
}
static void Main() {
int i = 1, j = 2;
Swap(ref i, ref j);
Console.WriteLine("i = {0}, j = {1}", i, j);
}
}
produces the output i = 2, j = 1For the invocation of Swap in Main, x represents i and y represents j. Thus, the invocation has the effect of swapping the values of i and j. end example] Paragraph 41 In a method that takes reference parameters, it is possible for multiple names to represent the same storage location. [Example: In the example
class A
{
string s;
void F(ref string a, ref string b) {
s = "One";
a = "Two";
b = "Three";
}
void G() {
F(ref s, ref s);
}
}
the invocation of F in G passes a reference to s for both a and b. Thus, for that invocation, the names s, a, and b all refer to the same storage location, and the three assignments all modify the instance field s. end example]
| |
| Jagger Software Ltd | |
| Company # 4070126 | |
| VAT # 762 5213 42 |