109,339
社区成员




class Student
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
public Student(string _name)
{
name = _name;
}
static void Main()//Main_4_3_4
{
Student s = new Student("zhang3");
ChageName(s);
Console.WriteLine(s.Name);
Console.Read();
}
static void ChageName( Student s)
{
s = new Student("li4");
//s.Name = "li4";
}
}
static void ChageName( Student s)
{
s = new Student("li4");
}
static void ChageName( Student s)
{
s.Name = "li4";
}
class Student
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
public Student(string _name)
{
name = _name;
}
static void Main()//Main_4_3_4
{
Student s = new Student("zhang3");
ChageName(out s);
Console.WriteLine(s.Name);
Console.Read();
}
static void ChageName(out Student s)
{
s = new Student("li4");
//s.Name = "li4";
}
}
static void ChageName( Student s)
{
s = new Student("li4");
}
型参和实参原本都指向zhang3,运行s = new Student("li4");之后型参指向了li4,而实参仍然指向zhang3static void ChageName( Student s)
{
s.Name = "li4";
}
这个型参s和实参s是指向同一个zhang3,而这样一操作,实例的Name属性就从zhang3变成了li4
static void ChageName(Student s) //形参是在栈上的实参的拷贝,和实参指向的是堆上的同一块区域。
{
s = new Student("li4"); //形参声明对象,形参指向新的地址,而是参没有变化
//s.Name = "li4"; //形参的Name变化,因为形参和实参指向的是堆上的同一块区域,所以形参的Name变化,同时实参的Name也变化
}