如果按引用传递引用类型,被调用者可能改变对象的状态数据的值和所引用的对象。
如果按值传递引用类型,被调用者可能改变对象的状态数据的值,但不能改变所引用的对象。
static void Main(string[] args)
{
// Passing ref-types by ref.
Console.WriteLine("***** Passing Person object by reference *****");
Person mel = new Person("Mel", 23);
Console.WriteLine("Before by ref call, Person is:");
mel.Display();
SendAPersonByValue(mel);
Console.WriteLine("After by ref call, Person is:");
mel.Display();
SendAPersonByReference(ref mel);
Console.WriteLine("After by ref call, Person is:");
mel.Display();
}
static void SendAPersonByValue(Person p)
{
// Change the age of "p"?
p.personAge = 99;
// Will the caller see this reassignment?
p = new Person("Nikki", 41);
}
static void SendAPersonByReference(ref Person p)
{
// Change some data of "p".
p.personAge = 555;
// "p" is now pointing to a new object on the heap!
p = new Person("Nikki", 999);
}