哪位大侠帮忙解释一下这个C#程序的运行结果?

来源:百度知道 编辑:UC知道 时间:2024/09/27 05:55:01
这个C#程序的运行结果为什么是0而不是11 谢谢!
class myclass1
{
private int x = 0;
private int y = 0;
public int a
{
get
{
return x;
}
set
{
x = value;
}

}
public int b
{
set
{
y = value;
}
get
{
return y;
}
}
}
class myclass2
{
myclass1 cl1 = new myclass1();
public int add()
{
return cl1.a + cl1.b;

}

}
class Program
{

static void Main(string[] args)
{
myclass1 cl = new myclass1();
myclass2 cl2 =

因为在myclass2中,myclass1被重新实例化,内存被重新分配,在myclass2中的内存已经不是Main()中定义的myclass1的内存,所以即使你给myclass1的属性a、b赋值为5、6,也不能把这两个值赋到myclass2中那个重新被分配新内存的myclass1中去。

这不很明显么老兄!myclass2 的对象cl2调用该类的add()方法,而这个方法返回的是cl1.a + cl1.b的和,在你程序中cl1.a和cl1.b并没有在主函数中赋值,所以应用程序默认给他们赋初值0,所以结果为0

Main()中的C1对象跟myclass2中的C1对象 不是同一个,每个C1都会指向自己的实例空间,Main()中的C1的a,b是5和6,而myclass2中的C1对象的a,b没有赋值,所以是myclass2()构造函数给他们的默认值0

class myclass2
{
myclass1 cl1 = new myclass1();
public myclass2(int a,int b)
{
cl1.a =a;
cl1.b=b;
}
public int add()
{
return cl1.a + cl1.b;

}
}

class Program
{

static void Main(string[] args)
{ int j = 5;
int k = 6;

myclass2 cl2 = new myclass2(j,k);

Console.WriteLine("x+y={0}", cl2.add());

}
}

没编译过 大概就是这样的!