どうすれば次のことができますか?
OrderedDictionary<string, object> bag = new OrderedDictionary<string, object>();
public void Add(string str,ref object obj) {
bag.Add(str,**ref obj**);
}
したがって、「bag」内の特定の「obj」にアクセスしたいときはいつでも、引数で渡された「obj」を参照します。
どうすれば次のことができますか?
OrderedDictionary<string, object> bag = new OrderedDictionary<string, object>();
public void Add(string str,ref object obj) {
bag.Add(str,**ref obj**);
}
したがって、「bag」内の特定の「obj」にアクセスしたいときはいつでも、引数で渡された「obj」を参照します。
オブジェクトはすでに参照型です。辞書内のオブジェクトにアクセスすると、元のオブジェクトが変更されます。
あなたが持っているのは、メモリ内の同じオブジェクトへの複数の参照です。したがって、変更やコピーなどは正しく機能し、同じオブジェクトに保持されます。ただし、オブジェクトを他の何か(nullなど)に設定する場合は、現在の参照のみをnullに設定し、実際のオブジェクトは設定しないことに注意してください。
一方、refは、メモリ内のオブジェクトではなく、実際の参照をパラメータとして渡す場合に役立ちます。これを例に取ってください:
void SomeMethod(object obj)
{
obj = null;
}
void SomeRefMethod(ref object obj)
{
obj = null;
}
この呼び出しで:
object obj1 = new object();
Console.WriteLine(obj1 == null); //False
SomeMethod(obj1);
Console.WriteLine(obj1 == null); //False
SomeMethodRef(ref obj1);
Console.WriteLine(obj1 == null); //True
この状況でobj1
はnon-null
、はまだへの呼び出しの後SomeMethod
、そしてそれはnull
への呼び出しの後SomeMethodRef
です。