La clase System.WeakReference permite almacenar información prescindible. En palabras sencillas, podemos guardar una referencia a información que no es tan valiosa. Un ejemplo muy común es el uso de caché. Si queremos usar cache, podemos hacerlo utilizando esta clase, así permitiremos que el garbage collector pueda liberar la memoria utilizada por nuetros datos si es que fuese necesario.
En la implementación en Mono, se utiliza internamente la estructura GCHandle.