ref vs out parameters C# with Example
Code class Program { static void Main(string[] args) { int a = 20; Console.WriteLine("Inside Main - Before Callee: a = {0}", a); Callee(a); Console.WriteLine("Inside Main - After Callee: a = {0}", a); Console.WriteLine(); Console.WriteLine("Inside Main - Before CalleeRef: a = {0}", a); CalleeRef(ref a); Console.WriteLine("Inside - After CalleeRef: a = {0}", a); Main Console.WriteLine(); Console.WriteLine("Inside - Before CalleeOut: a = {0}", a); Main CalleeOut(out a); Console.WriteLine("Inside Main - After CalleeOut: a = {0}", a); Console.ReadLine(); } static void Callee(int a) { a += 5; Console.WriteLine("Inside Callee a : {0}", a); } static void CalleeRef(ref int a) { a += 10; Console.WriteLine("Inside CalleeRef a : {0}", a); } static void CalleeOut(out int a) { // can't use a+=15 since for this method 'a' is not intialized only declared in the method declaration a = 25; //has to be initialized Console.WriteLine("Inside CalleeOut a : {0}", a); } } Output Inside Main - Before Callee: a = 20 Inside Callee a : 25 Inside Main - After Callee: a = 20 Inside Main - Before CalleeRef: a = 20 Inside CalleeRef a : 30 Inside Main - After CalleeRef: a = 30 Inside Main - Before CalleeOut: a = 30 Inside CalleeOut a : 25 Inside Main - After CalleeOut: a = 25