当传递一个对象时,为什么要使用'ref'关键字?

345

如果我将一个对象传递给一个方法,为什么要使用ref关键字?这不是默认行为吗?

例如:

class Program
{
    static void Main(string[] args)
    {
        TestRef t = new TestRef();
        t.Something = "Foo";

        DoSomething(t);
        Console.WriteLine(t.Something);
    }

    static public void DoSomething(TestRef t)
    {
        t.Something = "Bar";
    }
}


public class TestRef
{
    public string Something { get; set; }
}

输出结果为“Bar”,这意味着对象被作为引用传递。
11个回答

0

我相信在某个地方我读到了一个关于相关行为的美丽描述。它大概是这样的:

在C#中,没有“按引用传递”,因为除了不安全代码之外,没有指针,实际上一切都是“按值复制”。只有复杂类型的实例应该被视为保存引用作为值的变量。因此,在方法调用时,“值”(指向真实数据的引用)被复制。因此,在方法内部,参数引用相同的对象,但保存引用的变量是原始输入的副本。ref关键字将其更改为按引用调用。

官方文档

官方文档续


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接