我刚刚开始学习一个类来处理与 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
所以,在我重载的构造函数上,我接受了对a实例的引用,是吗?System.Net.Sockets.Socket
现在,在我的Socket
财产上,设置值时,它必须是ByVal
. 我的理解是复制内存中的实例,并将这个新实例传递给,并且我的代码设置为引用内存中的这个实例。是的?value
_Socket
如果这是真的,那么我不明白为什么我想将属性用于除本机类型之外的任何东西。我想如果复制具有大量成员的类实例,性能会受到很大影响。此外,特别是对于这段代码,我想复制的套接字实例不会真正起作用,但我还没有测试过。
无论如何,如果你能证实我的理解,或者解释我模糊逻辑中的缺陷,我将不胜感激。