Acerca de...
El equipo
Encuestas
Política de privacidad
WinTablets

Encuesta

¿Cual crees que triunfará?

Ver Resultados

Cargando ... Cargando ...

últimas entradas importantes

Categorías

Archivos

02
Ago 2014
Desarrollorfogdevtrucos

Desarrollo: Ocultar una propiedad heredada

Este problema suele darse cuando creas un nuevo control a partir de uno ya existente por la vía de heredar y no de agregar, aunque también podría ocurrir en cualquier tipo de herencia. De todos modos la ocultación no puede ser completa ya que el lenguaje no lo soporta. Digamos que es un pequeño truquillo.

Primero os explico la diferencia entre herencia y agregación respecto a los controles de Windows Phone (y Windows), y luego os enseño el truco.

Uno de los puntales básicos de la orientación a objetos es la herencia. Para los legos se trata de tomar algo ya hecho, hacer un hijo de ello y cambiar ciertas partes de su comportamiento. En general, pero no siempre, se trata de ampliarlo.

No sé realmente quién inventó la herencia visual. Sé que uno de los primeros fue Delphi seguido de C++Builder, e ignoro si el Visual Basic de Microsoft llegó a implementarla o no.

Básicamente se trata de heredar un control gráfico (que puede ser un Form o Page  completo) y cambiar su comportamiento, añadiendo y ocultando propiedades. No os confundáis, esto que puede parecer evidente no lo era tanto, y de hecho a Microsoft le costó varias versiones de .NET que la cosa funcionara como debe, y aun a fecha de hoy…

(No entraremos en detalles en el hecho de que en Delphi y C++Builder aquello función perfecto desde el primer día).

Resumiendo, una forma de obtener un control nuevo es heredar de uno viejo y cambiar su comportamiento, igual que heredamos de una clase cualquiera. De hecho un control es una clase. Que no sea un solo fichero de texto y mezcle XAML en una especie de hibridación es incidental. Delphi también lo hacía.

Este tipo de creación de controles es completamente no visual y se suele hacer cuando queremos modificar el comportamiento de un control o su aspecto si se trata de pequeños cambios cosméticos.

La otra forma de crear controles es mediante la agregación. Es decir, cogemos varios controles existentes y los juntamos, creando otro nuevo que contenga la combinación de ambos gracias al uso de un contenedor.

Esto se suele hacer de forma visual y en el caso de .NET para Windows Phone y Windows mediante XAML mezclado con código en C# o VB.NET. Personalmente añoro la herencia múltiple de C++, que habría facilitado enormemente este tipo de creaciones.

Crear un control de este tipo es relativamente fácil, yéndonos al explorador de soluciones y añadiendo un elemento nuevo del tipo “Control de usuario”. Esto nos crea algo como la captura de pantalla.

Pasted Graphic

A partir de ahí podemos soltar controles existentes y ajustarlos a nuestro antojo. También podemos dejar la cosa así, accediendo a cada control añadido de forma manual a través del propio control de usuario, ya sabéis:

 

M_controlDeUsuario.TextBox.Text=“Hola mundo”;

 

Pero lo suyo es crearnos propiedades (reflejadas o no) y nuestros métodos. Más adelante quizás explique cómo hacerlo, pero ahora se escapa del ámbito de esta entrada.

Volviendo al tema de la ocultación de propiedades heredadas, supongamos el código siguiente:

 

    internalclassClaseBase
    {
        public int Veces { get; set; }
 
        public int VecesReales { get; set; }
    }
 
    internalclassClaseHeredada:ClaseBase
    {
        public new int Veces
        {
            get;
            private set;
 
        }
    }

 

Fijáos en la captura de pantalla:

Pasted Graphic 2

Como veis, acabamos de forzar que no se pueda asignar dicha propiedad. También podemos forzar que no se pueda leer, pero no ambas cosas a la vez.

Si cambiamos su tipo de público a privado, el código de la derecha accederá a la propiedad de la clase base en lugar a la de la hija.

Es una limitación de C# que podemos soslayar un poco. Quizás en versiones futuras podamos hacerlo igual que se realiza con métodos.

Y no, tampoco podemos sobrecargar los métodos set_ y get_ ocultos. El compilador no nos deja. ¿De qué estoy hablando con es de los métodos ocultos? Eso es ejercicio para vosotros. Un gallifante para quien lo adivine. :-D

 

Por RFOG | 6 Comentarios | Enlaza esta entrada
contacto@wintablet.info tema WinTablet.info por Ángel García (Hal9000)