Saltar al contenido

¿Qué son las propiedades automáticas en C# y cuál es su propósito?

Luego de de nuestra prolongada compilación de datos dimos con la respuesta este apuro que pueden tener muchos lectores. Te regalamos la solución y nuestro objetivo es resultarte de gran apoyo.

Solución:

Las propiedades automáticas se utilizan cuando no se requiere lógica adicional en los descriptores de acceso a la propiedad.
La declaración sería algo como esto:

public int SomeProperty  get; set; 

Son solo azúcar sintáctico, por lo que no necesitará escribir el siguiente código más largo:

 private int _someField;
 public int SomeProperty 
 
    get  return _someField;
    set  _someField = value;
 

Editar: Ampliando un poco, estos se utilizan para que sea más fácil tener variables privadas en la clase, pero permiten que sean visibles para fuera de la clase (sin poder modificarlas)

Ah, y otra ventaja con las propiedades automáticas es que puedes usarlos en interfaces! (Que no permiten variables miembro de ningún tipo)

Con propiedades normales, puedes hacer algo como:

private string example;
public string Example 

    get  return example; 
    set  example = value; 

Las propiedades automáticas le permiten crear algo realmente conciso:

public string Example  get; set; 

Entonces, si desea crear un campo en el que solo se pueda configurar dentro de la clase, puede hacerlo:

public string Example  get; private set; 

Esto sería equivalente a:

private string example;
public string Example 

    get  return example; 
    private set  example = value; 

O en Java:

private String example;

public String getExample() 
    return example;


private void setExample(String value) 
    example = value;

Editar: @Paya también me alertó sobre:

  • http://msdn.microsoft.com/en-us/library/bb384054.aspx
  • http://weblogs.asp.net/dwahlin/archive/2007/12/04/c-3-0-features-automatic-properties.aspx

Si está preguntando por qué usaría Propiedades o Propiedades automáticas, esta es la filosofía de diseño detrás de esto.

Un principio de diseño importante es que usted Nunca exponga los campos como públicos, pero siempre acceda a todo a través de propiedades. Esto se debe a que nunca se puede saber cuándo se accede a un campo y, lo que es más importante, cuándo se configura. Ahora, la mayor parte del tiempo, nunca se necesita ningún procesamiento al establecer u obtener el valor (por ejemplo, verificación de rango). Por eso se crearon las Propiedades Automáticas. Son una forma simple, de una sola línea, de crear una propiedad. El compilador crea la tienda de respaldo.

Si bien esto es lo que hago incluso para mis programas internos, probablemente sea más importante para los diseñados para uso público (para la venta, código abierto, etc.). Si usa una propiedad automática y luego decide que necesita hacer algo más en el set o getpuede cambiar fácilmente su código sin romper la interfaz pública.

Actualizar

Como punto de aclaración a un comentario a continuación, si todo el código es suyo, entonces no, puede que no haga mucha diferencia entre una propiedad y un campo para usted. Pero, si está diseñando una biblioteca que será consumida por otros, entonces alternar entre campos públicos y propiedades causará excepciones a menos que el código que usa la biblioteca se vuelva a compilar primero.

Como prueba, creé un proyecto de biblioteca y declaré una propiedad llamada TestData. Creé un proyecto completamente nuevo solo para consumir esta biblioteca. Todo funcionó como se esperaba. Luego cambié la propiedad a un campo público (el nombre permaneció igual) y copié sobre la nueva biblioteca DLL sin volver a compilar el proyecto de consumo. El resultado fue una excepción lanzada ya que el código esperaba encontrar los métodos de propiedad de los métodos. get_TestData y set_TestDatapero no se accede a los campos a través de métodos.

Unhandled Exception: System.MissingMethodException: Method not found: 'Void TestLibrary.TesterClass.set_TestData(System.String)'.
   at TestLibraryConsumer.Program.Main(String[] args)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *