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 paravalue
e 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.