C# 再次引用问题?

C# 再次引用问题?,c#,.net,C#,.net,输出: class Foo { public int A { get; set; } } class Program { static void Main(string[] args) { var f = new Foo(); var ff = f; Console.WriteLine(f.GetHashCode()); Console.WriteLine(ff.GetHashC

输出:

 class Foo
    {
        public int A { get; set; }
    }

class Program
{
    static void Main(string[] args)
    {
        var f = new Foo();
        var ff = f;

        Console.WriteLine(f.GetHashCode());
        Console.WriteLine(ff.GetHashCode());

        FooFoo(ref f);
        BarBar(f);
    }

    private static void BarBar(Foo f)
    {
        Console.WriteLine(f.GetHashCode());
    }

    private static void FooFoo(ref Foo f)
    {
        Console.WriteLine(f.GetHashCode());
    }
}

FooFoo
BarBar
之间有什么区别?

在这种情况下没有有效的区别

ref
的要点不是传递对对象的引用,而是传递对变量的引用

考虑以下变化:

58225482
58225482
58225482
58225482
在这种情况下,
FooFoo
的更改也将更改
Main
方法中的
f
变量,但是
BarBar
方法仅更改局部变量


在任何情况下,所有引用类型都将作为引用类型传递,您不能对此进行更改。
ref
的唯一一点是允许被调用的方法更改它正在传递的变量。

不要使用Foo类,而是尝试使用字符串执行。
private static void BarBar(Foo f)
{
    Console.WriteLine(f.GetHashCode());
    f = new Foo();
}

private static void FooFoo(ref Foo f)
{
    Console.WriteLine(f.GetHashCode());
    f = new Foo();
}