El Blog de Óscar Sotorrío Sánchez - MCP Application Development Foundation - C#

Todo lo que vaya aprendiendo de .NET, C#, ASP.NET, SQL Server, etc, lo compartiré con vosotros.

El autor:

Óscar Sotorrío Sánchez
Contacto Send mail

Encuéntralo

Álguien dijo...


Los sueños son las únicas mentiras que pueden dejar de serlo.

Anónimo

Métodos parciales

Si ya conoces la funcionalidad de las clases parciales introducidas en C# 2.0 rapidamente prodrás intuir que son los métodos parciales introducidos como novedad en C# 3.0. Y como ya habrás deducido, los métodos parciales trabajan en el contexto de clases parciales.

En primer lugar veremos como utilizarlos con ejemplos de código, luego hablaremos brevemente cuando utilizarlos y finalmente daremos algunas consideraciones a tener en cuenta.

Vamos a definir una clase parcial que estará implementada en dos ficheros de código diferentes. Por ejemplo, este sería el primer archivo de código:

 

public partial class SaludoPersona
{  
	//Definición del método parcial. Solo contiene la firma del método, no contiene código.  
	partial void SaludarConNombre(string nombre);
  
	public void Saludar()  
 	{    
		Console.WriteLine("Hola ");    
		SaludarConNombre("Oscar");  
	}
}

 

Y a continuación el resto del código de la clase parcial que como hemos mencionado antes, normalmente estará implementado en otro archivo de código.

 

public partial class SaludoPersona
{  
	//Implementación del método parcial. Aquí añadimos el código al método parcial antes definido.  
	partial void SaludarConNombre(string nombre)  
	{    
		Console.WriteLine(nombre);  
	}  
 
	public void SaludoIngles(string nombre)  
	{    
		Console.WriteLine("Hello {0}", nombre);  
	}
}

 

Como pedemos observar en una parte del código solo tenemos la definición del método parcial, no está implementado, es decir, no tiene cuerpo. En el segundo archivo de código tenemos la implementación del método parcial. Aquí es donde se ha escrito lo que hará el método.

Supongamos que tenemos dos equipos de desarrollo en distintas ciudades o paises. A un equipo se le ordena implemantar la primera parte de la clase parcial. Este programador solo sabe que tiene que definir un método parcial en su parte de la clase y después llamarlo. No sabe, ni tiene porque saber, que hace realmente el método. Al segundo equipo de desarrollo se le encarga la implementación del método además del resto del código de su clase parcial.

¿Pero que sucede si no realizamos la implemenación del método en la segunda parte de la clase?. En este caso, el compilador eliminará la definición del método y todas las llamadas en tiempo de compilación del ensamblado final de la clase. Es decir, que no se produce un error en tiempo de ejecución porque no existirá el método realmente. Por lo tanto, la implementación del código de un método parcial no es obligatoria, es opcional.

En el simple ejemplo de antes, se puede haber decidido que no se implemente el código por el momento. Pero se prevee que será utilizado en un futuro. En consecuencia, el primer equipo no tiene que rectificar su código, porque el compilador eliminará la definición y la llamada al método parcial.

Los métodos parciales son normalmente utilizados en situaciones en los que una clase es generada automaticamente por una herramienta y está debe permitir que el programador personalize la funcionabilidad de la clase. Por este motivo la herramienta tan solo definirá los métodos parciales. Luego será el programador el que le de "caracter" al método con su código personal.

Consideraciones que debemos tener en cuenta sobre este tipo de métodos:

  • El método siempre debe devolver void.
  • Pueden tener parámetros de tipo ref, pero no de tipo out.
  • Son implícitamente private, por lo tanto no admiten modificadores de accesibilidad. 
  • Pueden tener modificadores static y unsafe. 
  • No se puede crear un delegado para un método parcial.

 


Tags:
Categories: Lenguajes
Posted by Oscar.SS on lunes, 24 de agosto de 2009 13:53
Permalink | Comentarios (0) | Post RSSRSS comment feed

Métodos extensores

Los métodos extensores o métodos de extensión, son un tipo especial de métodos estáticos que se utilizan para añadir funcionalidad a otros tipos sin utilizar la herencia o el polimorfismo.

Aunque en principio los métodos extensores más comunes son los que se utilizan con los operadores de consulta estándar de LINQ, podemos también añandir funcionalidad a tipos sellados (sealed) o a tipos propios de .NET de los cuales no conocemos el código que los implementa.

Veamos cual es la sintaxis de los métodos de extensión:

 

   public static class NombreClaseContenedora
   {
      
public static ValorDevuelto NombreMetodoExtensor(this tipo argumento, parámetros)
      {
         
//Código del método extensor.
      
}
   }

Como podemos apreciar el método extensor es estático y está implementado en una clase también estática. Es importante mendionar que ambos, la clase y el método, deben tener el mismo modificador de accesibilidad, en este caso public. No tendría sentido poder acceder desde el código cliente a la clase y no poder hacerlo al método, por ejemplo.

Veamos un ejemplo práctico. Supongamos que tenemos que multiplicar una cantidad introducida por un usuario desde un TextBox y retornar el resultado a otro campo de texto. Es evidente que esto no tiene ninguna dificultad y que podríamos hacerlo con una función de las de siempre pero...veamos el ejemplo y luego entramos en los detalles.

 

   public static class ClaseExtensora
   {
      
public static string MultiplicarXDos(this string arg)
      {
         
int valor Convert.ToInt32(arg);
         
valor *2;
         return 
valor.ToString();
      
}
   }

El primer parámetro de MultiplicarXDos() especifica en qué tipo actúa el método y va precedido del modificador this. En este caso el método actua sobre los tipos System.String de .NET. Esto quiere decir que a partir de este momento, cualquier variable de tipo cadena que definamos en nuestro código tendrá añadido un método MultiplicarXDos().






A pesar de ser un método estático, la llamada al mismo se efectúa como si se tratase de un método de instancia en el tipo extendido. Para poder llamar al método, es necesario que el espacio de nombres en el que esta definida la clase contenedora del método extensor, esté explicitamente importada utilizando una directiva using. Es decir, que para utilizar este método extensor desde otro proyecto deberemos declarar un using EspacioDeNombres.

Como ya se ha comentado, el primer parámetro del método solo indica el tipo al que se le agrega el método. Si queremos podemos añadir tantos parámetros "normales" como queramos. A condición de que el primer parámetro siempre sea el que hace referencia al tipo extendido.

      public static string MultiplicarXDos(this string arg, int multiplicador)
      {
         
int valor Convert.ToInt32(arg);
         
valor *multiplicador;
         return 
valor.ToString();
      
}

A continuación os comento alguanas cosas que hay que tener en cuenta de los métodos de extensión:

  • Puede utilizar métodos de extensión para extender una clase, interfaz, enumerado, estructura, etc.
  • Los métodos de extensión no pueden tener acceso a las variables privadas del tipo que extienden.
  • En tiempo de compilación, los métodos de extensión siempre tienen menos prioridad que los métodos de instancia definidos en el propio tipo. Es decir, que nunca se llamará a un método de extensión que tenga el mismo nombre y firma que un método de la clase que extiende.
  • Y comentar una última cosa, la clase contenedora de los métodos extensores debe ser una clase de nivel superior. Es decir, no puede ser una clase anidada dentro de otra clase.


Tags:
Categories: Lenguajes
Posted by Oscar.SS on lunes, 26 de enero de 2009 23:34
Permalink | Comentarios (3) | Post RSSRSS comment feed

¿Un título?...imprescindible.

La primera vez que vi este libro en la estantería de una librería le eche un vistazo rápido y lo volví a dejar. Enseguida me di cuenta que era un libro de lenguaje puro, solo C# y nada más. Nada del entorno de desarrollo Visual Studio. Solo aplicaciones de consola.

Menos mal que algunas semanas después volví a la librería y lo estudie con más detenimiento. Este libro es algo más que un libro dedicado C#, es un curso de programación muy completo utilizando muchas de las librerías de .NET Framework.

 

Título: Microsoft C#. Curso de Programación.
Autor: CEBALLOS, F.J.
Editorial: Ra-Ma.
I.S.B.N.: 84-7897-737.6
Fecha publicación: Octubre 2006.
Nº páginas: 886.
Nº capítulos: 19.
Precio: 46.90 euros.



Elogios:

Es un libro muy completo. Los primeros 9 capítulos están dedicados a lo básico. Desde ¿qué es un programa?, hasta métodos y colecciones. Tiene muchos ejemplos básicos y gran cantidad de textos explicativos.

Los capítulos del 10 al 15 tienen por misión dejar claro que es la abstracción en C# o la POO. Aquí los ejemplos de código se complican un poco más. En todos los capítulos del libro hay ejercicios resueltos y ejercicios propuestos.

En los últimos 4 capítulos es donde se hace más hincapié en eso de “curso de programación”. Aquí el autor ofrece algo que no suele encontrarse en todos los libros: listas lineales, listas circulares, arboles binarios, algoritmos de programación (búsquedas, ordenación, etc) y programación con hilos.

El libro contiene 4 apéndices. A destacar el que está dedicado a las novedades de C# 3.0 cerrando de esta forma la edición del libro totalmente actualizada a la última versión del lenguaje.

 

Críticas:

En algunas ocasiones da la sensación, durante la lectura, que el autor va muy deprisa. Es como si diera cosas por sentadas. Aunque es un libro que comienza con lo básico también es verdad que quizás no sea el más recomendado para empezar de cero absoluto.

Quizás no me guste mucho el orden de los capítulos dedicados a la POO. Pero esto tan solo es cuestión de gustos.

 

Resumiendo:

Si tienes pocos conocimientos de programación con C# y buscas un libro para profundizar, este es tu libro. También puede servir se consulta a más de uno (yo mismo), se exponen la mayoría de las clases e interfaz de uso común (algunas no tan comunes) de la librería .NET.

El libro viene con CD en el que se incluyen todas las aplicaciones realizadas en el libro y lo necesario para que “corrar” en tu máquina (.NET Framework SDK).


Tags: ,
Categories: Formación
Posted by Oscar.SS on viernes, 28 de marzo de 2008 3:47
Permalink | Comentarios (0) | Post RSSRSS comment feed