Я только начинаю с класса для обработки клиентских подключений к TCP-серверу. Вот код, который я написал до сих пор:
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
Итак, на моем перегруженном конструкторе я принимаю ссылку на экземпляр System.Net.Sockets.Socket
, да?
Теперь, в моем свойстве Socket
, при установке значения оно должно быть ByVal
. Насколько я понимаю, экземпляр в памяти скопирован , и этот новый экземпляр передан value
, и мой код устанавливает _Socket
для ссылки этот экземпляр в памяти. Да?
Если это правда, тогда я не понимаю, почему я хотел бы использовать свойства для чего угодно, кроме нативных типов. Я мог бы предположить, что при копировании экземпляров классов с большим количеством членов может быть значительное снижение производительности. Кроме того, для этого кода, в частности, я бы предположил, что скопированный экземпляр сокета не будет работать, но я еще не тестировал его.
В любом случае, если бы вы могли либо подтвердить мое понимание, либо объяснить недостатки моей туманной логики, я был бы очень признателен.