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

Fecha: 25/Oct/2005 (20 de Octubre 2004)
Autor: Misael Monterroca [email protected]

 


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