miércoles, 4 de diciembre de 2013

Tipos y Métodos Parciales en C#

Tabla de Contenido

0. Introducción
1. Tipos Parciales
1.1 Herencia en Tipos Parciales
2. Métodos Parciales
3. Conclusiones
4. Glosario
5. Literatura & Enlaces

0. Introducción

En esta ocasión voy a presentarles un concepto muy importante e interesante del lenguaje C#: se trata de las clases y métodos parciales (partials). Es una facilidad que brinda el lenguaje para particionar la definición (o declaración) de un tipo, estructura (struct), o interfaz en múltiples archivos. Como veremos más adelante, también aplica para la declaración de métodos.

1. Tipos Parciales

Un escenario típico del uso de tipos parciales es el diseñador de formularios de Microsoft Visual Studio [2][3]. La idea básica de usar tipos parciales en el diseño de aplicaciones Windows, es separar el código de presentación que genera el propio diseñador de formularios de Microsoft Visual Studio del que crea el programador. En la Figura 1 se presenta este particionamiento:
Particionamiento de un formulario.
Figura 1. Particionamiento de un formulario.
En la figura anterior podemos observar que el elemento Formulario.cs tiene dos subelementos Formulario.Designer.cs, el cual contiene todo el código relacionado con los controles del formulario, y Formulario que corresponde con la clase que será utilizada por el programador para escribir su propio código. Veamos el código:

Archivo C# Formulario.Designer.cs [enlace alternativo]:

En el archivo se incluye todo el código generado de manera automática por el propio Windows Form Designer; además se incluyen otros métodos sobreescritos.

Archivo C# Formulario.cs [enlace alternativo]:

Como aquí creamos un formulario, esta clase es la que contiene la declaración de herencia (línea 1), y el constructor sin argumentos (línea 3).

Ahora obsérvese el uso común de la palabra clave partial [4]; esta es la especificación que nos permite particionar nuestra definición de formulario en múltiples archivos.

Otro ejemplo (adaptado de [4]) más general consiste en:

Archivo C# Archivo1.cs [enlace alternativo]:
Archivo C# Archivo2.cs: [enlace alternativo]: 

A tener en cuenta:
  • Los dos archivos contienen la declaración de la clase A.
  • Los miembros son accesibles mutúamente.
  • Debe estar incluido en el mismo namespace.
Por otro lado, la declaración de tipos parciales tiene algunas restricciones. Por ejemplo, si intentamos algo como

partial class FormularioFormatoExtracto {}
class FormularioFormatoExtracto {}

En tiempo de compilación se generará el siguiente error:

error CS0260: Missing partial modifier on declaration of type `FormularioFormatoExtracto'. Another partial declaration of this type exists


Otras de las restricciones impuestas es la de prevenir constructores con firmas duplicadas en las diferentes particiones, es decir, que no se pueden repetir. Por otro lado, los tipos parciales también deben residir en el mismo assembly.

1.1 Herencia en Tipos Parciales

En [1] nos informan sobre las dos maneras diferentes de declarar una clase parcial cuando se utiliza el mecanismo de herencia:
  • Especificación de la clase base en ambas particiones (en [1] los llaman participantes):
partial class FormularioFormatoExtracto : FormularioBase {}
partial class FormularioFormatoExtracto : FormularioBase {}
  • Especificación en cualquiera de las particiones:
partial class FormularioFormatoExtracto : FormularioBase {}
partial class FormularioFormatoExtracto {}

[Nota: En cuanto a implementación de interfaces, cada partición puede implementar de forma separada los contratos de las interfaces.]

2. Métodos Parciales

En uno de los ejemplos (Archivo1.cs y Archivo2.cs) de la sección anterior vimos que el lenguaje C# a través de la construcción partial permite la declaración (partición) de un método parcial.

En los métodos parciales ocurre una particularidad interesante: consiste en la composión de dos partes: definición e implementación.

La definición consiste en especificar la firma del método en el código autogenerado (por ejemplo por el diseñador de Microsoft Visual Studio). Por otro lado, la implementación es autoría del propio programador. Veamos este sencillo ejemplo:
En la línea 6 se declara el método ValidarExtracto (no posee implementación). En la segunda partición (líneas 10-21) se lleva a cabo la implementación concreta del método.

[Nota: Los métodos parciales son de naturaleza private y no deben retornar ningún valor (void)].

3. Conclusiones

Los tipos de datos parciales y métodos parciales demuestran otra característica interesante para asignar tareas de codificación a diferentes programadores sobre un tipo en particular (de ahí el concepto de particionamiento). Vimos cómo declarar una clase parcial a través de la construcción partial. Se reconocieron algunas restricciones sobre el particionamiento de tipos, por ejemplo, el de la omisión de la palabra clave partial en una de las particiones.

4. Glosario

  • Clase parcial
  • Método parcial
  • Partial
  • Partición

5. Enlaces & Literatura

[1]: C# 5.0 in a Nutshell by Joseph Albahari and Ben Albahari. Copyright 2012 Joseph Albahari and Ben Albahari, 978-1-449-32010-2.
[2]: Getting Started with Windows Forms - http://msdn.microsoft.com/en-us/library/ms229601(v=vs.110).aspx
[3]: Microsoft Visual Studio - Wikipedia, the free encyclopedia - http://en.wikipedia.org/wiki/Microsoft_Visual_Studio
[4]: partial (Type) (C# Reference) - http://msdn.microsoft.com/en-us/library/wbx7zzdd.aspx


O

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.