I've recently come across this little "gotcha" regarding class hierarchies and passing arguments to methods using ref (and out ). The restriction I encountered is you can't pass a variable defined as a derived class to a method which takes a ref argument of it's base class. To demonstrate this little restriction, consider the following example. Take the following two classes: public class Widget { private int quantity = 0; public int Quantity { get { return quantity; } set ...