namespace Test
{
class Program
{
static void Main(string[] args)
{
int num = 0;
Person p = new Person("Li");//调用Person类的构造函数
A1(p,num); //调用静态方法,此时,name=Li; num=0
Console.WriteLine(p.name+","+num);//所以输出为:Li,0
Console.ReadKey();
}
static void A1(Person p, int num)//静态方法,无返回值
{
p = new Person("Wang");
num = 1;//函数无返回值,num的值没有返回
}
}
class Person
{
public string name;
public Person(string name) //构造函数,初始化公有字段name;
{
this.name = name;
}
}
}作者: ARMdong 时间: 2012-7-24 13:38
因为A1(p,num)传入的值是在Main函数中创建的对象Person p = new Person("Li"),p.name="Li";覆盖了定义A1函数时p.name初始化的值,所以答案是Li,而不是Wang
其实你这个问题是出在了起名上了,你把对象名,静态方法参数名都写成P、num,无形中增加了自己理解的难度,你把静态方法参数改成别的,就好理解很多,不容易看错
static void A1(Person aman, int anum)
{
man = new Person("Wang");
num = 1;
}
在看 A1(p,num);
这个过程其实就相当于
先执行
aman=p; anum=num; //传进来参数
然后执行方法体
aman=new Person("Wang");//刚才传参让 aman指向了p指的空间,现在让aman指向new Person("Wang")所在空间,对p没任何影响
anum=1;
改变了局部变量,但是没有返回值,没什么影响作者: 魏-玉-彪 时间: 2012-7-24 19:43
static void A1(Person p, int num)
{
p = new Person("Wang");
num = 1;
这个静态方法先加载,然后 p被Person p = new Person("Li");覆盖了。作者: 陈云帆 时间: 2012-7-25 04:11