void SomeMethod(ref Object obj)和void SomeMethod(Object obj)之间的区别

时间:2014-03-27 07:00:03

标签: c#

我们知道将对象传递给任何方法都是引用类型。那之间有什么区别 传递简单的对象并在方法中使用ref关键字传递对象?请回复正确的解释。

2 个答案:

答案 0 :(得分:0)

如果您没有使用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";
        }

然后输出将是新实例

答案 1 :(得分:0)

这已被多次询问过。使用SomeMethod(object obj)时,引用将按值传递。因此,引用按值复制并提供给方法。对象本身不会被复制。这两个参考文献"指向"同一个对象。

使用SomeMethod(ref object obj)引用传递引用类型。因此,该方法对对象使用相同的引用(不是对与by-value相同的对象的另一个引用)。

如果SomeMethod代码分配给obj参数,则差异很明显,例如

obj = "CHANGED!";

然后在方法返回后,调用者是否看到引用具有新值,取决于是否使用ref