#270 – Passing a Reference Type by Reference
March 14, 2011 1 Comment
When you pass a reference type by value to a method, you pass in a reference to the object. The method can change the object, but can’t change the reference.
public static void AnnotateMotto(Dog d) { // Change the dog's motto d.Motto = d.Motto + " while panting"; }
You can also pass a reference type by reference, which means that the method can change not only the contents of the object pointed to, but change the reference, causing it to refer to a different object.
public static void FindNewFavorite(ref Dog fav) { fav.Motto = "No longer the favorite"; foreach (Dog d in AllDogs) { if (d.Motto.Contains("ball")) fav = d; } }
Below is an example of calling this method.
Dog kirby = new Dog("Kirby"); kirby.Motto = "Retrieve balls"; Dog jack = new Dog("Jack"); jack.Motto = "Growl at people"; Dog myFav = jack; Dog.FindNewFavorite(ref myFav); Console.WriteLine(myFav.Name); // Kirby
Thanks Sean! I’ve not seen anyone explain why you might want to pass a reference type by reference before. I knew it was possible, because the compiler doesn’t complain about it, but I could never think of a good reason to do it before.