Csharp/CSharp Tutorial/Language Basics/Parameter Reference — различия между версиями

Материал из .Net Framework эксперт
Перейти к: навигация, поиск
м (1 версия)
 
(нет различий)

Текущая версия на 15:19, 26 мая 2010

Objects are passed by reference.

<source lang="csharp">using System;

class Test {

 public int a, b; 

 public Test(int i, int j) { 
   a = i; 
   b = j; 
 } 

 /* Now, ob.a and ob.b in object 
    used in the call will be changed. */ 
 public void change(Test ob) { 
   ob.a = ob.a + ob.b; 
   ob.b = -ob.b; 
 } 

}

class MainClass {

 public static void Main() { 
   Test ob = new Test(15, 20); 

   Console.WriteLine("ob.a and ob.b before call: " + 
                      ob.a + " " + ob.b); 

   ob.change(ob); 

   Console.WriteLine("ob.a and ob.b after call: " + 
                      ob.a + " " + ob.b); 
 } 

}</source>

ob.a and ob.b before call: 15 20
ob.a and ob.b after call: 35 -20

Pass references to methods

<source lang="csharp">using System;

class MyClass {

 int a, b; 
 
 public MyClass(int i, int j) {  
   a = i;  
   b = j;  
 }  
 
 /* Return true if ob contains the same values as the invoking object. */ 
 public bool sameAs(MyClass ob) {  
   if((ob.a == a) & (ob.b == b)) 
      return true;  
   else return false;  
 }  

 public void copy(MyClass ob) { 
   a = ob.a; 
   b  = ob.b; 
 } 

 public void show() { 
   Console.WriteLine("a: {0}, b: {1}", 
                     a, b); 
 } 

}

class MainClass {

 public static void Main() { 
   MyClass ob1 = new MyClass(4, 5);  
   MyClass ob2 = new MyClass(6, 7);  
 
   Console.Write("ob1: "); 
   ob1.show(); 

   Console.Write("ob2: "); 
   ob2.show(); 

   if(ob1.sameAs(ob2))  
     Console.WriteLine("ob1 and ob2 have the same values."); 
   else 
     Console.WriteLine("ob1 and ob2 have different values."); 

   Console.WriteLine(); 

   // now, make ob1 a copy of ob2 
   ob1.copy(ob2); 

   Console.Write("ob1 after copy: "); 
   ob1.show(); 

   if(ob1.sameAs(ob2))  
     Console.WriteLine("ob1 and ob2 have the same values."); 
   else 
     Console.WriteLine("ob1 and ob2 have different values."); 

 }  

}</source>

ob1: a: 4, b: 5
ob2: a: 6, b: 7
ob1 and ob2 have different values.
ob1 after copy: a: 6, b: 7
ob1 and ob2 have the same values.

Use ref to pass an int value type by reference

<source lang="csharp">using System;

class RefTest {

 /* This method changes its argument. 
    Notice the use of ref. */ 
 public void sqr(ref int i) { 
   i = i * i; 
 } 

}

class MainClass {

 public static void Main() { 
   RefTest ob = new RefTest(); 

   int a = 10; 

   Console.WriteLine("a before call: " + a); 

   ob.sqr(ref a); // notice the use of ref 

   Console.WriteLine("a after call: " + a); 
 } 

}</source>

a before call: 10
a after call: 100