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?
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.)
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.
Property Set
est pour les variables de type objet (ByRef) tandis que Property Let
est pour les variables de type valeur (ByVal)