Propiedades automáticas en C# 3.0: Reinventando la rueda… poligonal

La nueva versión de C# trae una característica que se conoce como propiedades automáticas, que no es otra cosa que el hecho de poder definir propiedades elementales (es decir, aquellas propiedades sin efectos laterales que solamente son una representación de una variable miembro interna) de forma mucho más sencilla y teniendo que teclear menos código.

La característica la he visto en el blog de Wriju, en concreto esta entrada recientemente colocada. También creo que esto haya sido comentado por aquí, pero no puedo evitar la tentación de decir algo al respecto.

Usando los mismos ejemplos que aparecen en el citado blog, y resumiendo un poco, lo que en C# 2.0 se expresa como:

public class Customer

{

public Customer() { }

 

private int _CustID;

 

public int CustID

{

get { return _CustID; }

set { _CustID = value; }

}    

 

}

En C# 3.0 podría escribirse así:

public int CustID

{

get;

set;

}

Casi nada, la gente de Microsoft ha inventado una rueda poligonal, ya que dicha característica a mi modo de ver viola los conceptos de un lenguaje sintético (igual que lo violaba el C# original) y no hace más que enredar lo que otros chicos, también de Microsoft, han resuelto más que satisfactoriamente con la introducción de una palabra reservada en el lenguaje, y es que en C++/CLI existe lo que se llaman propiedades triviales. Definir una propiedad al estilo C++/CLI es tan sencillo como teclear:

property int CustID;

 

Personalmente pienso que el hecho de no introducir la palabra reservada property dentro del lenguaje C# es un defecto de diseño bastante serio, máxime cuando el lenguaje fue creado en su momento desde cero. De todos modos ignoro si existe alguna limitación o razón para no utilizar dicha palabra en el lenguaje, pero creo que no.

3 comentarios sobre “Propiedades automáticas en C# 3.0: Reinventando la rueda… poligonal”

  1. Hola,

    Property no es una palabra reservada de c#. Si no la incluyeron para declarar las properties, supongo que por eso no la incluyeron en esta feature.

    Ahora bien, es más fácil declarando property para automatizar el Get,Set. Pero no es el estilo C# … creo.

  2. Entiendo que es correcto:
    //Admite lectura y escritura
    public int CustID

    {

    get;

    set;

    }

    Y esto también:
    //Admite escritura
    public int CustID

    {

    set;

    }

    Y esto también:
    //Admite lectura
    public int CustID

    {

    get;

    }

    En C++/CLI:

    property int CustID;

    ¿A cual de las tres definiciones anteriores equivale esta?

    Saludos.

  3. El código de C++/CLI se corresponde a una propiedad de lectura/escritura. En el Rationale de Sutter (creo que) viene explicado el motivo de la sintaxis tan esquemática, motivado para definir una propiedad trivial en lugar de una variable pública y así poder permitir efectos laterales en futuras versiones de la clase sin afectar a su interfaz.

Responder a anonymous Cancelar respuesta

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