oop - net - En VB6, ¿cuál es la diferencia entre Property Set y Property Let?
public get set vb (3)
Property Let
es más versátil que Property Set
. Este último está restringido a referencias de objetos solamente. Si tienes esta propiedad en una clase
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
Puede llamar a Property Set Picture
con
Set oObj.Picture = Me.Picture
Puede llamar Property Let Picture
con ambos
Let oObj.Picture = Me.Picture
oObj.Picture = Me.Picture
La implementación del Property Set
es lo que otros desarrolladores esperan de las propiedades que son referencias a objetos, pero a veces incluso Microsoft proporciona solo Property Let
de referencia, lo que lleva a la sintaxis inusual oObj.Object = MyObject
sin la declaración Set
. En este caso, el uso de la instrucción Set
conduce a un error de tiempo de compilación o tiempo de ejecución porque no hay ningún Property Set Object
implementado en la clase oObj
.
Tiendo a implementar tanto Property Set
como Property Let
para propiedades de tipos estándar (fuentes, imágenes, etc.) pero con diferentes semánticas. Generalmente, en Property Let
, tiendo a realizar una "copia profunda", es decir, clonar StdFont
lugar de StdFont
a mantener una referencia al objeto original.
Acabo de crear varios métodos de Property Set
, y no se compilaron. Cuando los cambié a Property Let
, todo estaba bien.
Desde entonces he estudiado la documentación para encontrar la diferencia entre Property Set
y Property Let
, pero debo admitir que no soy más sabio. ¿Hay alguna diferencia, y si es así, alguien podría ofrecer un indicador para una explicación adecuada?
Property Set
es para objetos (por ejemplo, instancias de clase)
Property Let
es para tipos de datos "normales" (por ejemplo, cadena, booleano, largo, etc.)
Property Set
es para variables similares a objetos (ByRef) mientras que Property Let
es para variables de tipo valor (ByVal)