.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.