查看下面的代码并告诉我为什么在调用函数UpdateContext之后,变量connection2没有与变量connection1相同的哈希码.
当我将变量connection2设置为connection1时,两个变量都有一个指向相同内存地址的指针.但是在函数UpdateContext中通过ref传递变量connection1后,使用'new'指令修改指针,connection1有一个新的指针地址,但connection2仍然是旧地址.
class Program
{
static void Main(string[] args)
{
var connectionInitializer = new ConnectionInitializer();
connectionInitializer.Initialize();
Console.ReadLine();
}
}
public class Connection
{
}
public class ConnectionInitializer
{
public void Initialize()
{
var connection1 = new Connection();
var connection2 = connection1;
Console.WriteLine("Connection 1 (Before ref): " + connection1.GetHashCode());
Console.WriteLine("Connection 2 (Before ref): " + connection2.GetHashCode());
this.UpdateContext(ref connection1);
Console.WriteLine("Connection 1 (After ref): " + connection1.GetHashCode());
Console.WriteLine("Connection 2 (After ref): " + connection2.GetHashCode());
}
private void UpdateContext(ref Connection connection)
{
connection = new Connection();
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助.
你似乎误解了ref
想要实现的目标.基本上,当您将变量作为ref
参数传递时,它允许被调用者修改(原始)变量的值,就像它是本地的一样.鉴于此,为什么您希望覆盖变量connection1
的值以更改分配给的值connection2
?
换句话说,使用ref
类似于这段代码:
var connection1 = new Connection();
var connection2 = connection1;
connection1 = new Connection()
Run Code Online (Sandbox Code Playgroud)
显然在这种情况下,connection2
应该保持不变.对你来说也是如此.
归档时间: |
|
查看次数: |
162 次 |
最近记录: |