void someemethod (ref Object obj)和void someemethod (Object o
本文关键字:void Object someemethod obj ref | 更新日期: 2023-09-27 17:53:46
传递对象给任何方法都是引用类型。那么有什么区别呢传递简单的对象和传递对象与ref关键字在一个方法?
如果不使用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";
}
则输出为New instance
这个问题已经问过很多次了。对于SomeMethod(object obj)
,引用是按值传递的。因此引用按值复制并给定给方法。对象本身不会被复制。两个引用"指向"同一个对象。
对于SomeMethod(ref object obj)
,引用类型是通过引用传递的。因此,该方法使用对对象的相同引用(而不是像按值方法那样对同一对象的另一个引用)。
如果将SomeMethod
代码分配给obj
参数,则差异将很明显,例如
obj = "CHANGED!";
方法返回后,调用者是否看到引用有一个新值,取决于是否使用了ref