C#中'ref'关键字的正确用法是什么?我相信这方面有很多讨论主题,但我不清楚的是:
Kir*_*rst 22
使用ref意味着将引用传递给函数.
默认行为是函数接收对同一对象的新引用.这意味着如果更改引用的值(例如,将其设置为新对象),则不再指向原始源对象.当您通过使用时,ref更改引用的值会更改源引用 - 因为它们是相同的.
考虑一下:
public class Thing
{
public string Property {get;set;}
}
public static void Go(Thing thing)
{
thing = new Thing();
thing.Property = "Changed";
}
public static void Go(ref Thing thing)
{
thing = new Thing();
thing.Property = "Changed";
}
Run Code Online (Sandbox Code Playgroud)
如果你跑了
var g = new Thing();
// this will not alter g
Go(g);
// this *will* alter g
Go(ref g);
Run Code Online (Sandbox Code Playgroud)
Eri*_*ert 15
这里的答案中有很多令人困惑的错误信息.理解这一点的最简单方法是放弃"ref"的意思是"通过引用".考虑它的一个更好的方法是"ref"意味着"我希望被叫方的这个形式参数成为调用方的特定变量的别名".
当你说
void M(ref int y) { y = 123; }
...
int x = 456;
M(ref x);
Run Code Online (Sandbox Code Playgroud)
也就是说"在调用M时,被调用方的正式参数y是调用者侧变量x的另一个名称".将123分配给y与将123分配给x完全相同,因为它们是相同的变量,具有两个名称的变量.
就这样.不要考虑引用类型或值类型或其他,不考虑通过引用传递或通过值传递.所有"ref"表示"暂时为此变量创建第二个名称".
| 归档时间: |
|
| 查看次数: |
3859 次 |
| 最近记录: |