refとoutの使用は、値型の受け渡しに限定されません。これらは、参照が渡されるときにも使用できます。refまたはoutが参照を変更すると、参照自体が参照によって渡されます。これにより、メソッドは参照が参照するオブジェクトを変更できます。
この部分はどういう意味ですか?
refまたはoutが参照を変更すると、参照自体が参照によって渡されます。これにより、メソッドは参照が参照するオブジェクトを変更できます。
これは、 を使用ref
することで、オブジェクトの内容だけでなく、変数が指すオブジェクトを変更できることを意味します。
ref
オブジェクトを置き換えるパラメーターを持つメソッドがあるとします。
public static void Change(ref StringBuilder str) {
str.Append("-end-");
str = new StringBuilder();
str.Append("-start-");
}
それを呼び出すと、呼び出す変数が次のように変更されます。
StringBuilder a = new StringBuilder();
StringBuilder b = a; // copy the reference
a.Append("begin");
// variables a and b point to the same object:
Console.WriteLine(a); // "begin"
Console.WriteLine(b); // "begin"
Change(b);
// now the variable b has changed
Console.WriteLine(a); // "begin-end-"
Console.WriteLine(b); // "-start-"