visual net oop properties vb6 setter letter

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)