Tipos Parciales
(Clases Parciales, Estructuras Parciales, Interfases Parciales)

Fecha: 25/Oct/2005 (20 de Octubre 2004)
Autor: Misael Monterroca mmonterroca@neo-mx.com

 


Cuando estamos desarrollando una aplicación de manera colaborativa,  el principal problema al cual nos enfrentamos es cuando mas de un desarrollador necesita modificar un objeto ya sea clase, estructura o interfase  que en su momento esta siendo utilizada por otro desarrollador, esto normalmente nos obliga a tener que realizar la programación sobre objetos temporales a los cuales no podremos obtener la estructura real de nuestro objeto original con lo cual  terminamos incurriendo en un re-trabajo ya que al final nos obligara a realizar una sincronización del código de ambos objetos para incluir los cambios que ambos desarrolladores realizaron con los consecuentes errores al realizar este tipo de modificaciones .

La nueva versión de .Net 2.0 introdujo un nuevo concepto conocido como Tipos Parciales, el cual  solo es permitido en Clases, Estructuras e Interfases. Al utilizar este modificador durante  el  proceso de compilación este combinara desde los diferentes archivos fuente todos los tipos declarados como parciales  y creara una única representación del tipo.

Imaginemos que tenemos la siguiente estructura inicial de una clase la cual esta siendo modificada por el desarrollador “A”

 

    //Archivo de Código    Pedido.cs

    public class Pedido

    {

        eTipoPedido _TipoPedido = eTipoPedido.Normal;

 

        public void Agregar()

        {

            //HACK Implementación de Agregar

        }

 

 

        public eTipoPedido TipoPedido

        {

            get

            {

                return _TipoPedido;

            }

 

            set

            {

                _TipoPedido = value;

            }

        }

    }

 

Todo este código se encuentra dentro del archivo Pedido.cs, supongamos entonces que  el desarrollador “A” esta realizando la implementación del método “Agregar” pero el  desarrollador “B” necesita realizar la implementación del método “Consultar” para que ambos puedan escribir la clase al mismo tiempo (pero en diferentes archivos) esta la crearemos como Clase Parcial agregando el modificador Partial.

public partial class Pedido

 

ya que el modificador Partial ha sido agregado a nuestra clase entonces el desarrollador “B” podrá crear una “segunda” clase Pedido utilizando de igual manera el modificador Partial pero únicamente definiendo el método que el desarrollador necesite implementar en este caso el método Actualizar

    //Archivo de Código    Pedido2.cs 

namespace TiposParciales

{

    public partial class Pedido

    {

        public Boolean Actualizar()

        {

            //HACK La implementación correspondient

 

        }

    }

}

 

El código anterior lo creamos dentro del archivo Pedido2.cs y una vez que fue declarado podremos acceder a todos métodos, propiedades, eventos etc de nuestra clase pedido (los cuales incluyen por supuesto toda la funcionalidad expuesta desde el archivo Pedido.cs) el IntelliSense reconocerá de igual manera dicha  estructura aunque esta no se encuentre dentro del archivo de código que estamos utilizando ya que al final aún cuando se haya puesto el modificador Partial sigue siendo una única clase Pedido

//Archivo de Código Pedido2.cs

La implementación de nuestro método Actualizar será de la misma manera que si estuviéramos trabajando sin clases parciales.

 

 

//Archivo de Código    Pedido2.cs

public partial class Pedido

    {

        string _mensaje = "";

 

        public Boolean Actualizar()

        {

           

            //HACK La implementación correspondient

            if (this.TipoPedido == eTipoPedido.Urgente)

            {

                //HACK Enviar correo electronico

                this.Mensaje = "mensaje del correo";

            }

           

            //toda la implementación.....

           

            return true;

 

 

        }

 

        public string Mensaje

        {

            get

            {

                return _mensaje;

            }

 

            set

            {

                _mensaje = value;

            }

        }

    }

Como habíamos comentado, cuando realicemos la compilación se creara una representación única de nuestra clase lo cual lo podemos constatar utilizando el IL Dissasembler al examinar el ensamblado generado por nuestro proyecto.

Para poder utilizar clases parciales o cualquier tipo parcial no bastaría con que él  desarrollador “B” incluyera el modificador Partial en la definición de su clase ya que  el compilador generaría un error ya que es necesario que ambas definiciones de la clase sean del tipo Parcial.

Para Interfases y Estructuras aplica el mismo caso.

Interfases Parciales

 

 

 

Código en Interfase1.cs

 

//Autor Misael Monterroca

//Ejemplo de Interfases Parciales

namespace TiposParciales

{

    //Origen    Interfase1.cs

    public partial interface IPedido

    {

        bool Agregar();       

    }

}

 

 

Código en Interfase2.cs

 

//Autor Misael Monterroca

//Ejemplo de Interfases Parciales

namespace TiposParciales

{

    //Origen    Interfase2.cs

    public partial interface IPedido

    {

        bool Actualizar();

    }

}

 

 

 

Estructuras Parciales

 

 

Código en Estructura1.cs

namespace TiposParciales

{

    //Origen    Estructura1.cs

    public partial struct Utilerias

    {

        public void enviaCorreo()

        {

            //HACK Implementación de envía corre

        }

    }

}

 

Código en Estructura2.cs

 

namespace TiposParciales

{

    //Origen    Estructura2.cs

    public partial struct Utilerias

    {

        public void adjuntaArchivo()

        {

            //HACK Implementación adjuntar archivo

        }

    }

}

 

 

Realizando la compilación de todo nuestro proyecto y viendo este nuevamente  con el IL Dissasembler obtendremos la representación completa de nuestro ensamblado.

 

 

 

Si bien hemos visto la utilización de tipos parciales pensando en un ambiente colaborativo no solo esta restringido su utilización a estos casos, ya que bien puede utilizarse por ejemplo para organizar nuestro código en diferentes archivos. También vale la pena recordar que la simple utilización de tipos parciales no solucionara nuestra problemática de trabajar en equipo, ya que es casi forzoso la utilización de algún repositorio de código en donde siempre tengamos la ultima versión de nuestro código, que mejor si este repositorio fuera además un software que nos permita el control de código fuente como Microsoft SourceSafe por ejemplo.

 

 


ir al índice

Fichero con el código de ejemplo: neo_mx_TiposParciales - 12 KB