Csharp/CSharp Tutorial/Language Basics/Parameter Reference

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

Objects are passed by reference.

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); 
  } 
}
ob.a and ob.b before call: 15 20
ob.a and ob.b after call: 35 -20

Pass references to methods

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."); 
 
  }  
}
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

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); 
  } 
}
a before call: 10
a after call: 100