using System;
class Ref<A>
{
private A value;
public A Value {
get { return this.value; }
set { this.value = value; }
}
public Ref(A value) { this.value = value; }
}
public class Test
{
private static void print<A, B>(Ref<A> a, Ref<B> b)
{
Console.WriteLine("a.Value = {0}, b.Value = {1}", a.Value, b.Value);
}
public static void Main()
{
var a = new Ref<object>(null);
var b = a;
print(a, b);
a.Value = new object();
print(a, b);
}
}
dXNpbmcgU3lzdGVtOwoKY2xhc3MgUmVmPEE+CnsKCXByaXZhdGUgQSB2YWx1ZTsKCXB1YmxpYyBBIFZhbHVlIHsKCQlnZXQgeyByZXR1cm4gdGhpcy52YWx1ZTsgfQoJCXNldCB7IHRoaXMudmFsdWUgPSB2YWx1ZTsgfQoJfQoJcHVibGljIFJlZihBIHZhbHVlKSB7IHRoaXMudmFsdWUgPSB2YWx1ZTsgfQp9CgpwdWJsaWMgY2xhc3MgVGVzdAp7Cglwcml2YXRlIHN0YXRpYyB2b2lkIHByaW50PEEsIEI+KFJlZjxBPiBhLCBSZWY8Qj4gYikKCXsKCQlDb25zb2xlLldyaXRlTGluZSgiYS5WYWx1ZSA9IHswfSwgYi5WYWx1ZSA9IHsxfSIsIGEuVmFsdWUsIGIuVmFsdWUpOwoJfQoKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQl2YXIgYSA9IG5ldyBSZWY8b2JqZWN0PihudWxsKTsKCQl2YXIgYiA9IGE7CgkJcHJpbnQoYSwgYik7CgkJYS5WYWx1ZSA9IG5ldyBvYmplY3QoKTsKCQlwcmludChhLCBiKTsKCX0KfQ==