【问题标题】:passing in object by ref通过 ref 传入对象
【发布时间】:2010-10-18 06:56:30
【问题描述】:

有什么区别

public function Foo(ref Bar bar)
{
   bar.Prop = 1;
}

public function Foo(Bar bar)
{
   bar.Prop = 1;
}

本质上“参考”的意义是什么。对象不是总是通过引用吗?

【问题讨论】:

    标签: c# .net ref


    【解决方案1】:

    关键是你从来没有真正传递一个对象。您传递一个 reference - 参数本身可以通过引用或值传递。如果您更改参数值本身,它们的行为会有所不同,例如将其设置为 null 或其他参考。对于ref,此更改会影响调用者的变量;没有ref,它只是传递的值的副本,所以调用者看不到他们的变量有任何变化。

    更多详情请见my article on argument passing

    【讨论】:

    • 我猜你的意思是“argumetn 本身可以通过引用或值传递”而不是“通过参数或值”。还是我的词汇错了?
    【解决方案2】:

    是的。但如果你这样做:

    public function Foo(ref Bar bar)
    {
       bar = new Bar();
    }
    
    public function Foo(Bar bar)
    {
        bar = new Bar();
    }
    

    然后你会看到不同。第一个传递对引用的引用,因此在这种情况下 bar 被更改为您的新对象。在第二种情况下,它没有。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      • 2017-02-11
      • 2012-09-16
      相关资源
      最近更新 更多