Propiedades c++

Solo disponible en BuenasTareas
  • Páginas : 5 (1154 palabras )
  • Descarga(s) : 0
  • Publicado : 25 de enero de 2011
Leer documento completo
Vista previa del texto
PROPIEDADES DE C++

Las propiedades en C++/CLI tienen un tratamiento similar, por no decir idéntico, con su equivalente en C#, con la diferencia de que son algo más potentes, no porque lo hayan hecho así, sino por las características notacionales del C++.
El concepto de propiedad no nace con el .NET, sino que existe desde mucho antes. Ya Borland en su Delphi implementa la idea, luegoextendida a C++Builder: la __property.
El concepto nace con la idea de tener una forma de acceder a variables internas de una clase sin romper el concepto de encapsulación, así como la de permitir realizar efectos laterales en dichos accesos.
Una propiedad aparentemente representa una variable miembro pública dentro de una clase, pero realmente oculta en su interior dos llamadas a métodos, una para lalectura y otra para la escritura. Por ejemplo, el código
Int a=unObjeto.Valor;
Podría parecer un acceso a una variable pública, pero no lo es cuando hablamos de propiedades. Y el siguiente código tampoco:
unObjeto.Valor=33;
Aunque a simple vista parezca una lectura y una escritura sobre una variable miembro pública, realmente se está ejecutando el siguiente código, que el compilador sustituyepor nosotros:
Int a=unObjeto.get_Valor (); unObjeto.set_Valor (33);

Propiedades triviales
Nunca el nombre estuvo mejor puesto, y aunque C# 3.0 lo traerá, en C++/CLI existe desde el origen del lenguaje. Una propiedad trivial se declara como: ref class UnaClase {public: property int Valor;};
Y se escribe y se lee sobre ella tal y como hemos indicado más arriba. Pero el compilador nos estáengañando (o más bien está haciendo tareas laboriosas en nuestro lugar, lo que siempre es de agradecer). Lo que realmente está creando es Ref class UnaClase {int Valor; public: int get_Valor (void) {return Valor;}
Void set_Valor (int v) {Valor=v ;}};
Propiedades escalares
Estas son las propiedades 100% compatibles con .NET, y de forma equivalente a C#, se declaran de la misma forma:
Ref classUnaClase {public: property int Valor {int get (void) {return Valor ;}
void set(int v){Valor=v ;}} };

El funcionamiento es idéntico a la forma anterior, con la diferencia de que ahora estamos declarando los dos métodos que leen y escriben la propiedad, exactamente como en C#. Y como en C# podemos tener propiedades de sólo lectura, de sólo escritura y de lectura/escritura dependiendo de quémétodos implementemos.
Una diferencia importante con C# es que el nombre de los métodos puede ser cualquiera; aquí nosotros los hemos llamado get y set, pero podríamos haberlos llamado Juan y pepe. Lo que sí debemos tener en cuenta es la firma del método. El de lectura no ha de recibir ningún parámetro y devolver el mismo tipo que la propiedad y el de escritura justo al revés. Cualquier otra firma haráque el compilador proteste.
El C++/CLI tiene otra limitación (que creo que también tiene el C#, pero menos visible ya que parte de lo explicado queda completamente oculto por el compilador). Ya lo hemos dicho con anterioridad, si una propiedad se llama Valor, no podemos declarar métodos con los nombres set_Valor () ni get_Valor () ya que el compilador los está generando internamente paraimplementar las propiedades.
Lo que sí podemos hacer es declarar en un lado una propiedad e implentarla en otro. Considerando el código anterior, podríamos definir en el fichero cabecera:
ref class UnaClase {public: property int Valor { int get(void); void set(int v); } };
Y luego, en el fichero fuente (.cpp), implementar:
int UnaClase::Valor::get(void) { return Valor; } void UnaClase::Valor::set(intv) { Valor=v; }
Con esta característica damos un paso más allá, permitiendo ver la declaración de la propiedad pero ocultando el código que la compone en, por ejemplo, una biblioteca. Aunque realmente esta característica tiene poco valor, ya que mediante reflexión y desensamblado es trivial conocer el código fuente, pero ahí está para quien quiera usarla.

Propiedades indexadas
Aquí...
tracking img