【问题标题】:Difference between void SomeMethod(ref Object obj) and void SomeMethod(Object obj) [duplicate]void SomeMethod(ref Object obj) 和 void SomeMethod(Object obj) 之间的区别 [重复]
【发布时间】:2014-05-06 00:03:16
【问题描述】:

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

【问题讨论】:

    标签: c#


    【解决方案1】:

    当您不使用 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";
            }
    

    然后输出将是新实例

    【讨论】:

      【解决方案2】:

      这个问题已经被问过很多次了。对于SomeMethod(object obj),引用是按值传递的。所以 reference 是按值复制并赋予方法的。对象本身不会被复制。这两个引用“指向”同一个对象。

      SomeMethod(ref object obj) 引用类型是通过引用传递的。因此,该方法使用对对象的相同引用(而不是按值对同一对象的另一个引用)。

      例如,如果SomeMethod 代码分配给obj 参数,区别就会很明显

      obj = "CHANGED!";
      

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

      【讨论】:

        猜你喜欢
        • 2014-09-09
        • 1970-01-01
        • 2014-09-03
        • 2013-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-26
        • 1970-01-01
        相关资源
        最近更新 更多