2009-10-14 10 views
2

J'ai regardé une classe qui a une méthode qui accepte un paramètre qui est du même type de la classe contenant la méthode.Vb.Net question de portée - champs privés

Public Class test 
    private _avalue as integer 
    Public Sub CopyFrom(ByVal from as test) 
    _avalue = from._avalue 
    End Sub 
End Class 

Lorsqu'il est utilisé dans le code

a.CopyFrom(b) 

Il semble que par exemple "a" a une visibilité aux membres privés du passé dans l'instance "b" et la ligne

_avalue = from._avalue 

pistes sans erreur de copier le champ privé d'une instance d'objet à l'autre.

Est-ce que quelqu'un sait si cela est voulu? J'avais l'impression qu'un champ privé n'était accessible que par l'instance de l'objet.

Répondre

2

La portée private est liée au type pas instance. Alors oui, c'est par conception.

La classe test a des connaissances sur les parties privées de lui-même, de sorte qu'il peut utiliser ces parties également sur d'autres instances du même type.

+0

Merci Fredrik, ça a du sens. – Andrew

2

Vous écrivez quelque chose de similaire à un constructeur de copie.
Puisque la méthode/fonction de copie est écrite à l'intérieur de la même classe, elle aura accès aux variables privées de n'importe quelle instance de sa propre classe.

+0

Un exemple dans C# de copie ctor - http://en.csharp-online.net/Copy_Constructors –