(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
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