studio programacion para móviles libro edición desarrollo curso aplicaciones .net class properties oop accessor

.net - programacion - ¿Cuál es la mejor manera de acceder a las propiedades de la misma clase, a través de los usuarios o directamente?



manual de programacion android pdf (5)

Esto es algo de lo que no soy muy constante y siempre tengo curiosidad acerca de lo que otras personas hacen.

¿Cómo se accede a las propiedades internas (privadas o públicas)?

Por ejemplo, tienes esta propiedad:

Private _Name As String Public Property Name() As String Get Return _Name End Get Set(ByVal value As String) _Name = value End Set End Property

En la misma clase dentro de otra función, ¿cuál prefieres? ¿y por qué?

_Name = "Johnny"

o

Name = "Johnny"

Ignore el hecho de que utilicé Name en lugar de Me.Name.


Esto es bastante interesante, creo que la mayoría de la gente hace lo que yo hago

Me.Name = "Johnny"

o

Name = "Johnny"

Sin embargo, la mayoría de los proyectos que he visto usando

_Name = "Jonny"

estilo. Lo cual pensé que era una mala idea, y gracias a las respuestas lo confirmaste. Incluso la mayoría del código generado automáticamente por varias herramientas usa acceso directo.

¿Hay algún golpe de rendimiento en particular? O el compilador lo optimiza cuando no hay un código adicional en el conjunto o en el get.


Personalmente prefiero usar la propiedad cuando sea posible. Esto significa que aún obtiene la validación, y puede colocar fácilmente puntos de interrupción en el acceso a la propiedad. Esto no funciona cuando intenta hacer un cambio en dos propiedades que se validan entre sí, por ejemplo, un par "mínimo y máximo", donde cada una tiene una restricción de validación tal que min <= max en todo momento. Puede tener (C #):

public void SetMinMax(int min, int max) { if (max > min) { throw new ArgumentOutOfRangeException("max"; } // We''re okay now - no need to validate, so go straight to fields this.min = min; this.max = max; }

En algún momento en el futuro, me gustaría ver a C # obtener la capacidad de declarar el campo de respaldo dentro de la propiedad, de modo que sea privado solo la propiedad:

public string Name { string name; get { return name; } set { if (value == null) { throw new ArgumentNullException("value"); } name = value; } }

Fuera de la propiedad, no podrías obtener ningún name , solo Name . Ya tenemos esto para las propiedades implementadas automáticamente, pero no pueden contener ninguna lógica.


Yo prefiero:

Name = "Johny"

Para mí, la razón es bastante simple, si sucede algo malo con _Name, siempre puedes poner algo de salida en getter / setter y descubrir qué está causando el problema.


yo diría

Name = "Johnny"

La razón es que podría tener alguna validación (o desencadenar, o inicialización diferida, o ...), o más tarde podría decidir insertar alguna validación, al asignar Nombre y quiero estar seguro de desencadenar ese código.


Usar propiedad (Nombre). Creo que una propiedad debe ser el único "propietario" del campo subyacente (_name).

Ventajas de encapsular el campo bajo una propiedad:

  • Legibilidad: solo una región de código donde _name se cambia o procesa antes de que se devuelva.
  • Fácil de establecer punto de interrupción, depuración, etc.
  • SECO: No se repite ningún código en lo que se refiere a validación y procesamiento.
  • Cambiar la resistencia: Cambiar la validación y el procesamiento no afectará el código que usa la propiedad.