void someemethod (ref Object obj)和void someemethod (Object o

本文关键字:void Object someemethod obj ref | 更新日期: 2023-09-27 17:53:46

传递对象给任何方法都是引用类型。那么有什么区别呢传递简单的对象和传递对象与ref关键字在一个方法?

void someemethod (ref Object obj)和void someemethod (Object o

如果不使用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