传递参考变量by-ref或by-val?

时间:2011-01-26 09:20:46

标签: .net pass-by-reference

这似乎是一个愚蠢的问题,甚至是主观的,但我不确定这样做的正确方法是什么。

我有一个接收类并改变它的方法(特别是,它为a添加了一个新列 数据表)。我理解,使用引用类型,我可以通过值或按引用传递它,在这种情况下行为不会改变。

一方面,我不喜欢添加比需要更多的间接。如果by-val有效,我喜欢用它。

另一方面,by-ref使我的意图更清晰(虽然方法的名称应该足够了)。

我应该使用哪种,为什么?

3 个答案:

答案 0 :(得分:6)

不,当引用类型参数是“按引用”时,行为更改。这意味着调用者将看到参数本身的更改。

如果您在不需要时通过“引用”创建参数,则表示您的代码更少清除,而不是更多清除。它建议您更改参数,而不仅仅是修改参数引用的对象。这也将限制您的方法的调用方式,因为参数必须是l值。不是个好主意。

有关详细信息,请参阅我的article on parameter passing

答案 1 :(得分:2)

除非您想完全替换传递的实例,否则无需通过引用传递。当您传递引用类型的实例时,被调用的方法将始终能够与它交互(更改属性值,调用方法等)。被调用的方法唯一不能做的是用一个可以反映在调用代码中的方式用一个新的实例替换传递的实例。

答案 2 :(得分:0)

最好用一个例子来解释:

    //pass by val because you are not changing the reference
    public void FillCustomer(Customer customer)
    {
        customer.Firstname = "Joe";
        customer.Surname = "Bloggs";
    }

    //pass by ref because you are changing the reference
    public void FillCustomer(ref Customer customer)
    {
        customer = new Customer
        {
            customer.Firstname = "Joe";
            customer.Surname = "Bloggs";
        };
    }