Csharp/CSharp Tutorial/Language Basics/Parameter Reference — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
|
(нет различий)
|
Версия 18:31, 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