out キーワードは、メソッドにオブジェクトを参照渡しすることができます。
下記例では、ModifyText メソッドでは、値のコピーが渡されます。このため ModifyText の呼び出し後に、ModifyText の呼び出し元のオブジェクト(text)そのものに変化はありません。
一方で、後続の ModifyTextOut では、引数に out キーワードを伴います。ModifyTextOut を呼び出す際にも、引数に out キーワードをつけます。out キーワードは参照渡しのため、呼び出し元で ModifyTextOut に渡される引数(out text)の、メモリのアドレスを渡しています。ModifyTextOut 内では text のアドレスを経由して、ModifyText の呼び出し元のオブジェクト(text)そのものの値を書き換えています。
class Program { static void Main(string[] args) { string text = "abc"; ModifyText(text); Console.WriteLine("ModifyText の後:" + text); ModifyTextOut(out text); Console.WriteLine("ModifyTextOut の後:" + text); Console.ReadLine(); } private static void ModifyText(string param) { param = "xxx"; } private static void ModifyTextOut(out string param) { param = "zzz"; } }
実行結果です。