我们在测验中得到了这个问题,而我很难理解它。
void EmptyStudent(Student s)
{
s.Name = "";
s.Major = "Undeclared";
s.ID = "None";
}
EmptyStudent(objStudent);
“假设变量objstudent包含名称”John Doe“,major为”IST“,并且在调用方法之前id为”1001“,objStudent的内容在调用之后会是什么?”
有人可以向我解释一下。我认为它仍然是“John Doe”,“IST”和“1001”,因为它正在传递价值。由于它是通过值传递的,一旦你离开方法,变量不会保持不变吗?
答案 0 :(得分:2)
由于值已更改,我假设postgresql.conf
是一个类而不是结构。
类是引用类型。将它们传递给方法时,您将传递对同一对象的引用。
您需要将Student
和s
视为指向同一对象的两个不同引用。
结构的行为有所不同,当您将结构传递给方法时,会创建结构的克隆并将其传递给方法。
请注意,如果您将方法更改为:
objStudent
然后void EmptyStudent(Student s)
{
s = new Student();
s.Name = "";
s.Major = "Undeclared";
s.ID = "None";
}
的内容不会改变。这是因为objStudent
和s
是两个不同的引用,现在指向两个不同的对象。
要使objStudent
和objStudent
具有完全相同的引用(如同一个引用的两个别名),那么您需要像这样通过引用传递:
s
在这种情况下,在方法调用之后,void EmptyStudent(ref Student s)
{
s = new Student();
s.Name = "";
s.Major = "Undeclared";
s.ID = "None";
}
EmptyStudent(ref objStudent);
将指向新创建的对象,因此将更改其内容。