以下のコードを見て、関数UpdateContextを呼び出した後、変数connection2が変数connection1と同じハッシュコードを持たない理由を教えてください。
変数connection2をconnection1に設定すると、両方の変数に同じメモリアドレスへのポインタがあります。ただし、「new」命令でポインターを変更する関数UpdateContextのrefによって変数connection1を渡した後、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();
}
}
ご協力ありがとうございました。