I think you are over-thinking how Reference Types are stored. They go on the heap, and what you "get back" when you instantiate a Reference Type is a pointer to the in-memory location of the instance.
With Types String, Struct, and Enum, things get more complex in terms of internal storage.
See if you find this helpful: [
^].
If you want a deeper dive into Type handling, see Eric Lippert's articles: [
^], [
^], [
^] ,[
^], [
^]