web-dev-qa-db-fra.com

Dans VB6, quelle est la différence entre Property Set et Property Let?

Je viens de créer plusieurs Property Set méthodes, et ils n'ont pas compilé. Quand je les ai changés en Property Let, tout était bien.

J'ai depuis étudié la documentation pour trouver la différence entre Property Set et Property Let, mais je dois admettre qu'il n'est pas plus sage. Y a-t-il une différence, et si oui, quelqu'un pourrait-il offrir un pointeur pour une explication appropriée de celui-ci?

34
Brian Hooper

Property Set est pour les objets (par exemple, les instances de classe)

Property Let est pour les types de données "normaux" (par exemple, chaîne, booléen, long, etc.)

29
mwolfe02

Property Let est plus polyvalent que Property Set. Ce dernier est limité aux références d'objet uniquement. Si vous avez cette propriété dans une classe

Private m_oPicture          As StdPicture

Property Get Picture() As StdPicture
    Set Picture = m_oPicture
End Property

Property Set Picture(oValue As StdPicture)
    Set m_oPicture = oValue
End Property

Property Let Picture(oValue As StdPicture)
    Set m_oPicture = oValue
End Property

Tu peux appeler Property Set Picture avec

Set oObj.Picture = Me.Picture

Tu peux appeler Property Let Picture avec les deux

Let oObj.Picture = Me.Picture
oObj.Picture = Me.Picture

Implémentation de Property Set est ce que les autres développeurs attendent des propriétés qui sont des références d'objet mais parfois même Microsoft ne fournit que Property Let pour les propriétés de référence, conduisant à la syntaxe inhabituelle oObj.Object = MyObject sans Set instruction. Dans ce cas, l'utilisation de l'instruction Set conduit à une erreur de compilation ou d'exécution car il n'y a pas de Property Set Object implémenté sur la classe oObj.

J'ai tendance à implémenter les deux Property Set et Property Let pour les propriétés des types standard - polices, images, etc. - mais avec une sémantique différente. Généralement sur Property Let J'ai tendance à effectuer une "copie profonde", c'est-à-dire à cloner le StdFont au lieu de simplement conserver une référence à l'objet d'origine.

24
wqw

Property Set est pour les variables de type objet (ByRef) tandis que Property Let est pour les variables de type valeur (ByVal)

4
Foo Bah