我理解(或者至少我相信我这样做)将类的实例传递给方法ref而不是传递方法意味着什么ref.何时或在什么情况下应该通过类实例ref?ref在类实例中使用关键字时是否有最佳实践?
简而言之,ref如果您希望调用的函数能够更改该变量的值,则可以将值作为参数传递.
这与将引用类型作为参数传递给函数不同.在这些情况下,您仍然按值传递,但该值是参考.在传递的情况下ref,然后发送对变量的实际引用; 实质上,你和你正在调用的函数"共享"相同的变量.
考虑以下:
public void Foo(ref int bar)
{
bar = 5;
}
...
int baz = 2;
Foo(ref baz);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,baz变量的值为5,因为它是通过引用传递的.语义对于值类型是完全清楚的,但对于引用类型不是很清楚.
public class MyClass
{
public int PropName { get; set; }
}
public void Foo(MyClass bar)
{
bar.PropName = 5;
}
...
MyClass baz = new MyClass();
baz.PropName = 2;
Foo(baz);
Run Code Online (Sandbox Code Playgroud)
正如所料,baz.PropName将是5,因为MyClass是参考类型.但是,我们这样做:
public void Foo(MyClass bar)
{
bar = new MyClass();
bar.PropName = 5;
}
Run Code Online (Sandbox Code Playgroud)
使用相同的调用代码,baz.PropName将保留2.这是因为即使MyClass是引用类型,Foo也有自己的变量bar; bar并且baz刚开始时使用相同的值,但是一旦Foo分配了新值,它们就只是两个不同的变量.但是,如果我们这样做:
public void Foo(ref MyClass bar)
{
bar = new MyClass();
bar.PropName = 5;
}
...
MyClass baz = new MyClass();
baz.PropName = 2;
Foo(ref baz);
Run Code Online (Sandbox Code Playgroud)
我们最终PropName得到5,因为我们通过baz引用传递,使两个函数"共享"相同的变量.
| 归档时间: |
|
| 查看次数: |
5965 次 |
| 最近记录: |