ByRef vs ByVal Précisions

Je viens juste de commencer sur une classe permettant de gérer les connexions client à un serveur TCP. Voici le code que j'ai écrit jusqu'à présent:

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

Donc, sur mon constructeur surchargé, je suis acceptant un référence à un instance d'un System.Net.Sockets.Socket, oui?

Maintenant, sur mon Socket des biens, lors de la définition de la valeur, il est nécessaire d'être ByVal. C'est ma compréhension que la instance dans la mémoire est copié, et ce nouvelle instance est passé à value, et mon code définit _Socket pour faire référence à cette instance en mémoire. Oui?

Si cela est vrai, alors je ne vois pas pourquoi je veux utiliser les propriétés pour rien, mais en natif types. J'imagine que il peut y avoir un gain de performance si la copie des instances de classe avec beaucoup de membres. Aussi, pour que ce code en particulier, j'imagine un copié socket instance ne serait pas vraiment travailler, mais je n'ai pas encore testé.

De toute façon, si vous pouviez confirmer ma compréhension, ou d'expliquer les failles dans mon brouillard logique, je vous en serais très reconnaissante.

OriginalL'auteur Brad | 2010-12-08