Given that I have already covered value types - this should be pretty quick. Reference types have the following characteristics:

  • They are allocated on the heap.
  • There is a pointer on the stack which points to the location on the heap.
  • The .NET runtime automatically dereferences reference types.
  • Reference types are copied by reference.
  • You can _sometimes_ use the Clone method to get a deep or shallow copy of an object but it is by no means guaranteed.
  • When you pass a reference type by reference you end up with a double pointer, and the runtime still automatically dereferences it for you!

That should just about cover it