ByRef vs ByVal Esclarecimento

Estou apenas começando uma aula para lidar com conexões de clientes com um servidor TCP. Aqui está o código que escrevi até agora:

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

Portanto, no meu construtor sobrecarregado, estou aceitando umreferência para uminstância de umSystem.Net.Sockets.Socket, sim?

Agora no meuSocket propriedade, ao definir o valor, é necessário que sejaByVal. Entendo que oinstância na memória écopiado, e istonova instância é passado paravaluee meus conjuntos de códigos_Socket para referenciar esta instância na memória. Sim?

Se isso for verdade, não vejo por que desejaria usar propriedades para nada, exceto tipos nativos. Eu imagino que pode haver um impacto considerável no desempenho se copiar instâncias de classe com muitos membros. Além disso, para esse código em particular, eu imaginaria que uma instância de soquete copiada não funcionaria realmente, mas ainda não a testei.

De qualquer forma, se você pudesse confirmar minha compreensão ou explicar as falhas em minha lógica nebulosa, eu agradeceria muito.

questionAnswers(4)

yourAnswerToTheQuestion