【发布时间】:2014-05-06 00:03:16
【问题描述】:
我们知道将对象传递给任何方法都是引用类型。那么两者有什么区别 在方法中简单地传递对象并使用 ref 关键字传递对象?请以适当的解释回复。
【问题讨论】:
标签: c#
我们知道将对象传递给任何方法都是引用类型。那么两者有什么区别 在方法中简单地传递对象并使用 ref 关键字传递对象?请以适当的解释回复。
【问题讨论】:
标签: c#
当您不使用 ref 关键字传递对象时,对象引用将按值传递。而在其他情况下,对象是通过引用传递的。您可以通过以下示例获得更好的解释。
例子:
private void button1_Click_2(object sender, EventArgs e)
{
Student s = new Student
{
FirstName = "Svetlana",
LastName = "Omelchenko",
Password = "hh",
modules = new string[] { "001", "002", "003", "004" }
};
SomeMethod(s);
Console.WriteLine(s.FirstName); //will output Svetlana
}
private void SomeMethod(Student s)
{
s = new Student();
s.FirstName = "New instance";
}
class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Password { get; set; }
public string[] modules { get; set; }
}
如果你有这样的方法
private void SomeMethod(ref Student s)
{
s = new Student();
s.FirstName = "New instance";
}
然后输出将是新实例
【讨论】:
这个问题已经被问过很多次了。对于SomeMethod(object obj),引用是按值传递的。所以 reference 是按值复制并赋予方法的。对象本身不会被复制。这两个引用“指向”同一个对象。
SomeMethod(ref object obj) 引用类型是通过引用传递的。因此,该方法使用对对象的相同引用(而不是按值对同一对象的另一个引用)。
例如,如果SomeMethod 代码分配给obj 参数,区别就会很明显
obj = "CHANGED!";
那么在方法返回后,调用者是否看到引用有新值,取决于是否使用了ref。
【讨论】: