因为C#的所有对象都是从Object派生,所以C#对象的创建,类似C++中指针的创建,如果按照C++的模式来理解C#的引用关系就非常简单了。
C#对象之间的传递,始终是传递的是指针(按照C++的理解),所以在函数参数传递过程中就需要考虑到应用的问题了,也就是给指针的地址重新赋值。
看看我这个C#的新手自己写的demo。仅仅学习分享。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace ch11Ex02
{
partial class Person
{
private int age;
public int Age
{
set
{
age = value;
}
get
{
return age;
}
}
}
partial class Person
{
private string name;
public string Name
{
set
{
name = value;
}
get
{
return name;
}
}
}
class Program
{
static void increment(int x)
{
++x;
}
static void increment2(ref int x)
{
++x;
}
static void changePerson(Person p)
{
//++p.Age;
Person pp = new Person();
pp.Age = 200;
p = pp;
}
static void changePerson2(ref Person p)
{
//++p.Age;
Person pp = new Person();
pp.Age = 200;
p = pp;
}
static void Main(string[] args)
{
Person pTest = new Person();
pTest.Age = 10;
Person pTest2 = pTest;
pTest2.Age = 20;
Debug.Assert(pTest.Age == 20, "ERROR!!!!!!");
changePerson(pTest);
Debug.Assert(pTest.Age == 20, "ERROR");
changePerson2(ref pTest);
Debug.Assert(pTest.Age == 200, "ERROR!!!!!!!!!!!!");
Console.ReadKey();
}
}
}