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());
}
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
58225482
58225482
58225482
58225482
Run Code Online (Sandbox Code Playgroud)
FooFoo和之间有什么区别BarBar?
在这种情况下没有有效的区别.
关键ref是不要传递对象的引用,而是传递对变量的引用.
考虑以下变化:
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();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,FooFoo更改也将更改方法中的f变量Main,但该BarBar方法仅更改局部变量.
在任何情况下,所有引用类型都作为引用类型传递,您无法更改它.唯一的一点ref是允许被调用的方法更改它传递的变量.
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |