Pasar objetos por referencia o valor en C #

En C #, siempre pensé que las variables no primitivas se pasaban por referencia y los valores primitivos se pasaban por valor.

Así que al pasar a un método cualquier objeto no primitivo, cualquier cosa que se haga al objeto en el método afectaría al objeto que se pasa. (C # 101 cosas)

Sin embargo, he notado que cuando paso un objeto System.Drawing.Image, ¿no parece ser así? Si paso un objeto system.drawing.image a otro método, y cargo una imagen en ese objeto, entonces dejo que ese método salga del alcance y regrese al método de llamada, ¿esa imagen no se carga en el objeto original?

¿Por qué es esto

Respuestas a la pregunta(14)

Su respuesta a la pregunta