Property en Visual Basic sirve para encapsular el acceso a los datos de un objeto con la posibilidad de verificación, cálculos y control de acceso. Las propiedades contienen bloques Get (para leer el valor) y Set (para establecer el valor).
Private _age As Integer Public Property Age() As Integer Get Return _age End Get Set(ByVal value As Integer) If value < 0 Or value > 120 Then Throw New ArgumentException("¡La edad debe estar entre 0 y 120!") End If _age = value End Set End Property
Con tal propiedad se puede implementar la validación de valores, caché, cálculos en tiempo real, etc., y para el usuario el objeto parece ser un campo común.
Public Property ItemId As Integer ' crea automáticamente un campo oculto, no hay acceso a la lógica
Matiz: no se pueden ampliar las propiedades automáticas con lógica interna sin declarar explícitamente get/set.
Pregunta: ¿Se puede implementar una propiedad en Visual Basic con solo set público y get privado? ¿Cómo se pueden establecer diferentes niveles de acceso para get y set?
Respuesta: Sí, a partir de VB.NET se pueden especificar diferentes niveles de acceso para get y set:
Public Property Salary As Decimal Private Get Return _salary End Get Set(ByVal value As Decimal) _salary = value End Set End Property
En este ejemplo, solo la clase puede obtener el valor de Salary, los objetos externos solo pueden establecerlo.
Historia
Un desarrollador utilizó propiedades automáticas para todos los campos de un objeto comercial. Más tarde, se hizo necesaria la validación de la entrada de valores negativos, pero cambiar la propiedad automática a una explícita requería editar manualmente gran parte del código, lo que llevó a errores y un alto costo de trabajo.
Historia
Durante el proceso de migración de VB6 a VB.NET, algunas propiedades se implementaron como campos con modificadores de acceso públicos: esto abrió el acceso completo no autorizado a los datos internos de la clase, lo que condujo a modificaciones no deseadas del estado por objetos externos.
Historia
En un objeto complejo, la propiedad contenía cálculos adicionales en el bloque get, incluida la manipulación de archivos. Con una alta frecuencia de acceso a la propiedad, el rendimiento de la aplicación se redujo drásticamente; se descubrió que era mejor usar un campo privado con caché del resultado, en lugar de calcular el valor en tiempo real en cada get.