0

どうすれば次のことができますか?

OrderedDictionary<string, object> bag = new OrderedDictionary<string, object>();

public void Add(string str,ref object obj) {
    bag.Add(str,**ref obj**);
}

したがって、「bag」内の特定の「obj」にアクセスしたいときはいつでも、引数で渡された「obj」を参照します。

4

1 に答える 1

4

オブジェクトはすでに参照型です。辞書内のオブジェクトにアクセスすると、元のオブジェクトが変更されます。

あなたが持っているのは、メモリ内の同じオブジェクトへの複数の参照です。したがって、変更やコピーなどは正しく機能し、同じオブジェクトに保持されます。ただし、オブジェクトを他の何か(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

この状況でobj1non-null、はまだへの呼び出しの後SomeMethod、そしてそれはnullへの呼び出しの後SomeMethodRefです。

于 2012-11-24T17:57:21.250 に答える