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 avalue
y 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.