Я только начинаю с класса, чтобы обрабатывать клиентские подключения к 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
для ссылки на этот экземпляр в памяти. Да?
Если это правда, то я не понимаю, почему я хотел бы использовать свойства для чего-либо, кроме родных. Я бы предположил, что при копировании экземпляров класса с большим количеством участников может получиться довольно высокая производительность. Кроме того, для этого кода, в частности, я бы предположил, что экземпляр скопированного сокета не работает, но я еще не тестировал его.
В любом случае, если бы вы могли подтвердить мое понимание или объяснить недостатки в моей туманной логике, я был бы очень признателен.