Referências no VB.NET

Um pouco claro para mim são as referências (ponteiros?) Para as classes no VB.NET. A pergunta que estou prestes a fazer pode ser respondida com alguns testes, mas eu queria saber se alguém poderia postar uma explicação decente (ou links também).

Se você criar uma classe:

Public Class ReferenceClass

    Private myBooleanValue As Boolean = False
    Public Property BooleanValue As Boolean
        Get
            Return myBooleanValue
        End Get
        Set(value As Boolean)
            myBooleanValue = value
        End Set
    End Property

End Class

E então uma classe que realmente usa essa classe como uma propriedade:

Public Class UsingClass

     Private myReference As ReferenceClass
     Public Property Reference As ReferenceClass
        Get
             return myReference
         End Get
         Set(value As ReferenceClass)
             myReference = value
         End Set
     End Property

     Public Sub New(ByVal Reference As ReferenceClass)
         myReference = Reference
     End Sub

End Class

E então use-o assim:

Public Class RuntimeOrSomething

     Public Shared myReference As ReferenceClass
     Public Shared ReadOnly Property Reference As ReferenceClass
         Get
             If myReference Is Nothing Then myReference = new ReferenceClass()
             return myReference
         End Get
     End Property

     Public Shared Function BooleanCheck() As Boolean
         Reference.BooleanValue = True
         Dim tempClass As New UsingClass(Reference)
         tempClass.Reference.BooleanValue = False

         Return (tempClass.Reference.BooleanValue = Reference.BooleanValue)
     End Sub

     Public Shared Sub DoNothing()
          Reference.BooleanValue = True
          Dim someBoolean As Boolean = BooleanCheck

          ' Now Reference.Booleanvalue is "False"
     End Sub

End Class

Agora a funçãoBooleanCheck sempre retornarátrue, mesmo que a referência seja passada para a nova classeUsingClass "por valor", não por referência. Portanto, uma cópia da classe não é feita, mas a variável localmyReference noUsingClass ainda referências / pontos à propriedadeReference noRuntimeOrSomething.

Como isso pode ser explicado de maneira elegante?