首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

帮忙解释一上为什么是这个输出结果

2013-03-14 
帮忙解释一下为什么是这个输出结果?namespace MyTest{class Person{public string namepublic void Fun()

帮忙解释一下为什么是这个输出结果?
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();
}
}

}
[解决办法]
Person p2 = p1;

你把 p1 赋给了 p2 ,他们的值当然一样的
[解决办法]
class 是引用类型
[解决办法]
C#中类是引用类型,Person p2 = p1;传递的是p1的引用,即内存中的地址。因此修改了p1的值p2也会改变。如果是值类型如int i= 0; int j = i;  i=1;在输出就不是一样的了
[解决办法]
Person p1 = new Person();
p1.name = "张三";
p1.Fun();

Person p2 = p1;
p1.name = "李四";
p2.Fun();
[解决办法]
class是引用类型
p1和p2引用了同一对象
[解决办法]
肯定是一样的 p2和p1引用同一个对象,都获取name最新那个赋值。
[解决办法]
当p1 = new  Person();person 在堆中创建一个person实例,通过映射关系,p1指向new person()的实际物理地址,把p1 赋值给p2 ,p2并没有在堆中分配实际的内存,只是在栈中分配了一个p2的内存空间,当p1的值改变时,实际是改变堆中的结果,所以p2的值也改变了
[解决办法]
想让p2的值不发生变化,应该通过p2 = new person(); p2 = p1;
[解决办法]
Person类是引用类型,
p2其实是指向p1的引用,及p2和p1指向为同一个对象。所以当p1.Name再赋值"李四"时,p2.Name也为"李四"
Person p1=new Person();
p1.Name="李四";
p1=null;
Person p2=p1;
p2.Name=?

这个时候对像p2也为Null,

热点排行