ByRef vs ByVal Clarification

Я только начинаю работу над классом для обработки клиентских подключений к 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 . Насколько я понимаю, экземпляр в памяти копируется , и этот новый экземпляр передается в значение , а мои кодовые наборы _Socket для ссылки на этот экземпляр в памяти. Да?

Если это правда, то я не понимаю, почему я хочу использовать свойства для чего-либо, кроме собственных типов. Я' Я могу себе представить, что при копировании экземпляров класса с большим количеством членов может быть значительное снижение производительности. Кроме того, для этого кода, в частности, я бы предположил, что скопированный экземпляр сокета не будет работать, но я еще не тестировал его.

В любом случае, если бы вы могли подтвердить мое понимание или объяснить недостатки в моем туманная логика, я был бы очень признателен.

18
задан Ryan Gates 16 July 2013 в 14:41
поделиться