namespace MyTest
{
class Person
{
public string name;

public void Fun()
{
Console.WriteLine("你好我是{0}",this.name);
}
}

class Program
{
static void Main(string[] args)
{
Person p1 = new Person();
p1.name = "张三";

Person p2 = p1;

p1.name = "李四";

p1.Fun();
p2.Fun();
Console.ReadKey();
}
}}

解决方案 »

  1.   

    Person p2 = p1;你把 p1 赋给了 p2 ,他们的值当然一样的
      

  2.   

    C#中类是引用类型,Person p2 = p1;传递的是p1的引用,即内存中的地址。因此修改了p1的值p2也会改变。如果是值类型如int i= 0; int j = i;  i=1;在输出就不是一样的了
      

  3.   

    Person p1 = new Person();
    p1.name = "张三";
    p1.Fun();Person p2 = p1;
    p1.name = "李四";
    p2.Fun();
      

  4.   

    class是引用类型
    p1和p2引用了同一对象
      

  5.   

    肯定是一样的 p2和p1引用同一个对象,都获取name最新那个赋值。
      

  6.   

    当p1 = new  Person();person 在堆中创建一个person实例,通过映射关系,p1指向new person()的实际物理地址,把p1 赋值给p2 ,p2并没有在堆中分配实际的内存,只是在栈中分配了一个p2的内存空间,当p1的值改变时,实际是改变堆中的结果,所以p2的值也改变了
      

  7.   

    想让p2的值不发生变化,应该通过p2 = new person(); p2 = p1;
      

  8.   

    Person类是引用类型,
    p2其实是指向p1的引用,及p2和p1指向为同一个对象。所以当p1.Name再赋值"李四"时,p2.Name也为"李四"
    Person p1=new Person();
    p1.Name="李四";
    p1=null;
    Person p2=p1;
    p2.Name=?这个时候对像p2也为Null,