Aclaración ByRef vs ByVal

Estoy empezando en una clase para manejar conexiones de clientes a un servidor TCP. Aquí está el código que he escrito hasta ahora:

Imports System.Net.Sockets
Imports System.Net

Public Class Client
    Private _Socket As Socket

    Public Property Socket As Socket
        Get
            Return _Socket
        End Get
        Set(ByVal value As Socket)
            _Socket = value
        End Set
    End Property

    Public Enum State
        RequestHeader ''#Waiting for, or in the process of receiving, the request header
        ResponseHeader ''#Sending the response header
        Stream ''#Setup is complete, sending regular stream
    End Enum

    Public Sub New()

    End Sub

    Public Sub New(ByRef Socket As Socket)
        Me._Socket = Socket

    End Sub
End Class

Entonces, en mi constructor sobrecargado, estoy aceptando unreferencia a unaejemplo de unSystem.Net.Sockets.Socket, ¿si?

Ahora en miSocket propiedad, al establecer el valor, se requiere que seaByVal. Tengo entendido que elejemplo en la memoria escopiado, y estonueva instancia se pasa avaluey mis conjuntos de códigos_Socket para hacer referencia a esta instancia en la memoria. ¿Si?

Si esto es cierto, entonces no puedo ver por qué me gustaría usar propiedades para cualquier cosa que no sean los tipos nativos. Me imagino que puede haber un gran impacto en el rendimiento si copia instancias de clase con muchos miembros. Además, para este código en particular, me imagino que una instancia de socket copiada realmente no funcionaría, pero aún no la he probado.

De todos modos, si pudieras confirmar mi comprensión o explicar los defectos de mi lógica nebulosa, lo agradecería enormemente.

Respuestas a la pregunta(4)

Su respuesta a la pregunta