Jon Jagger
jon@jaggersoft.com
Table of Contents 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Notes DownloadECMA-334 C# Language Specificationpreviousnextprevious at this levelnext at this level 17 Classesprevious at this levelnext at this level 17.5 Methodsprevious at this levelnext at this level 17.5.1 Method parametersprevious at this levelnext at this level 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 = 1  
For 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]
{ JSL }
Jagger Software Ltd
Company # 4070126
VAT # 762 5213 42
Valid HTML 4.01Valid CSS