<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
> <channel><title>Linux Hispano &#187; mono</title> <atom:link href="http://www.linuxhispano.net/etiqueta/mono/feed/" rel="self" type="application/rss+xml" /><link>http://www.linuxhispano.net</link> <description>Noticias, tira, podcast, juegos, Linux y software libre</description> <lastBuildDate>Fri, 10 Feb 2012 14:00:58 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>Curso ADO.NET con MySQL &#8211; Conclusiones</title><link>http://www.linuxhispano.net/2011/12/29/curso-ado-net-con-mysql-conclusiones/</link> <comments>http://www.linuxhispano.net/2011/12/29/curso-ado-net-con-mysql-conclusiones/#comments</comments> <pubDate>Thu, 29 Dec 2011 18:09:46 +0000</pubDate> <dc:creator>F. Javier Carazo Gil</dc:creator> <category><![CDATA[Tutoriales]]></category> <category><![CDATA[ado.net]]></category> <category><![CDATA[conclusiones]]></category> <category><![CDATA[curso]]></category> <category><![CDATA[mono]]></category> <category><![CDATA[mysql]]></category> <guid
isPermaLink="false">http://www.linuxhispano.net/?p=8751</guid> <description><![CDATA[Se acaba el año y con él quiero dar por finalizado el curso de ADO.NET sobre Mono con MySQL que desde hace unos meses empecé en este portal. Llegamos a las conclusiones. En breve, anunciaré un nuevo curso de algo &#8230; <a
href="http://www.linuxhispano.net/2011/12/29/curso-ado-net-con-mysql-conclusiones/">Continuar leyendo <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Se acaba el año y con él quiero dar por finalizado <a
href="http://www.linuxhispano.net/cursos/curso-ado-net-con-mono-y-mysql/" target="_blank">el curso de ADO.NET sobre Mono con MySQL</a> que desde hace unos meses empecé en este portal. Llegamos a las conclusiones. En breve, anunciaré un nuevo curso de algo que domine y que no me cueste mucho tiempo desarrollar, cuando se me acaben las ideas, ya os pediré directamente recomendaciones.</p><p><strong>Conclusiones</strong></p><p>Aunque existen otras opciones para realizar labores similares a ésta, como Hibernate o directamente JDBC, siempre es bueno como he dicho desde un comienzo, conocer más posibilidades sobre todo en el caso de este tipo de tecnologías tan difundidas a día de hoy. No digo que Mono esté tan difundido como algunos querríamos, pero sí es verdad que por suerte o por desgracia, .NET Framework está presente en cada vez más ordenadores, y la compatibilidad de Mono con la plataforma de Microsoft le augura un futuro muy prometedor.</p><p><span
id="more-8751"></span></p><p>A través de este curso, he intentado mostraros las operaciones básicas y preliminares para comenzar a funcionar con ADO sobre Mono, utilizando además, una base de datos libre, MySQL que a su vez tiene una implementación de ADO propia. Sin lugar a dudas, un cocktail interesante.</p><p>Lo dicho, espero que os haya gustado y sobre todo que os haya sido lo suficientemente interesante como para que os animéis a desarrollar aplicaciones algo más complejas utilizando estas tecnologías.</p> ]]></content:encoded> <wfw:commentRss>http://www.linuxhispano.net/2011/12/29/curso-ado-net-con-mysql-conclusiones/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Curso ADO.NET con Mono y MySQL – Rellenando un DataSet</title><link>http://www.linuxhispano.net/2011/12/15/curso-ado-net-con-mono-y-mysql-rellenando-un-dataset/</link> <comments>http://www.linuxhispano.net/2011/12/15/curso-ado-net-con-mono-y-mysql-rellenando-un-dataset/#comments</comments> <pubDate>Thu, 15 Dec 2011 13:48:29 +0000</pubDate> <dc:creator>F. Javier Carazo Gil</dc:creator> <category><![CDATA[Tutoriales]]></category> <category><![CDATA[ado.net]]></category> <category><![CDATA[curso]]></category> <category><![CDATA[dataset]]></category> <category><![CDATA[datatable]]></category> <category><![CDATA[mono]]></category> <category><![CDATA[mysql]]></category> <category><![CDATA[mysqlcommand]]></category> <guid
isPermaLink="false">http://www.linuxhispano.net/?p=8599</guid> <description><![CDATA[Posiblemente, leer hacia delante sea una opción muy interesante en algunas ocasiones&#8230; pero en otras muchas no lo será y tendremos que recurrir a los versátiles DataSet. Haremos un uso básico de los mismos en este ejemplo, porque como os &#8230; <a
href="http://www.linuxhispano.net/2011/12/15/curso-ado-net-con-mono-y-mysql-rellenando-un-dataset/">Continuar leyendo <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Posiblemente, leer hacia delante sea una opción muy interesante en algunas ocasiones&#8230; pero en otras muchas no lo será y tendremos que recurrir a los versátiles <em>DataSet</em>. Haremos un uso básico de los mismos en este ejemplo, porque como os he dicho ya sus posibilidades son realmente amplias. Insertaremos un nuevo concepto, el de la clase <em>MySqlAdapter </em>que será quien se encargue de rellenar el <em>DataSet</em> a través del comando que ejecute el <em>SELECT</em>.</p><p>Previamente deberemos incluir la referencia a nuestro proyecto para el ensamblado <em>System.Data</em> que lo encontraréis dentro del menú de referencias en la pestaña “Paquetes”. En el comienzo del fichero también deberéis rellenar su respectivo <em>using System.Data</em>.</p><p>Una vez hecho esto, para rellenar el <em>DataSet </em>sólo tendremos que hacer:</p><p><span
id="more-8599"></span></p><pre>public static void Main(string[] args)
{
	MySqlConnection conexion = new MySqlConnection();
	conexion.ConnectionString = "database=linuxhispano;
server=localhost;user id=root; pwd=contraseña";
	conexion.Open();
	// nuevos objetos a utilizar
	DataSet datos = new DataSet();
	MySqlDataAdapter adaptador = new MySqlDataAdapter();
	try
	{
		MySqlCommand comando = new MySqlCommand
("SELECT * FROM ejemplo", conexion);
		adaptador.SelectCommand = comando;
		adaptador.Fill(datos);
	}
	catch(MySqlException exc)
	{
		Console.WriteLine("Ocurrió un error : " + exc.Message);
	}
	finally
	{
		conexion.Close();
	}
}</pre><p>Dentro de datos, tendremos un <em>DataTable </em>con todos los datos. Pero, ¿cómo acceder a ellos? Espero que con el siguiente bucle que voy a mostrar se quede todo un poco más claro. En este bucle recogeremos la tabla del <em>DataSet </em>y posteriormente la recorreremos primero por filas y luego cada fila por elementos. Imprimiremos el resultado por pantalla. Para no repetir código sólo pondremos la parte nueva y dónde va insertada.</p><pre>[...]
// nuevos objetos a utilizar
DataSet datos = new DataSet();
MySqlDataAdapter adaptador = new MySqlDataAdapter();
[...]
	adaptador.Fill(datos);
	DataTable tabla = datos.Tables[0];
	int i = 0;
	foreach(DataRow fila in tabla.Rows)
	{
		Console.WriteLine("Fila " + i.ToString()
 + " --&gt; Elementos : ");
		int j = 0;
		foreach(Object celda in fila.ItemArray)
		{
			Console.WriteLine("\tElemento : "
 + j.ToString() + " - " +  celda.ToString());
			j++;
		}
		i++;
	}
}
catch(MySqlException exc)
[...]</pre><p>La salida sería algo así:</p><pre>Fila 0 --&gt; Elementos :
	Elemento : 0 - 25
	Elemento : 1 - Gráficos
Fila 1 --&gt; Elementos :
	Elemento : 0 - 26
	Elemento : 1 - Programación
Fila 2 --&gt; Elementos :
	Elemento : 0 - 27
	Elemento : 1 – Sonido</pre><p>A partir de aquí, podríamos modificar los registros y no almacenarlos luego en la base de datos, convertir la salida en un fichero XML de manera directa, realizar un mapeo de la base de datos y hacer que los cambios sean instantáneos en ella&#8230; en definitiva, todo un mundo de opciones a muy pocas líneas de código de distancia que posibilitan, como he dicho desde un comienzo, un desarrollo del código ligero y rápido en el manejo de datos.</p> ]]></content:encoded> <wfw:commentRss>http://www.linuxhispano.net/2011/12/15/curso-ado-net-con-mono-y-mysql-rellenando-un-dataset/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Curso ADO.NET con Mono y MySQL &#8211; Primeras consultas</title><link>http://www.linuxhispano.net/2011/12/01/curso-ado-net-con-mono-y-mysql-primeras-consultas/</link> <comments>http://www.linuxhispano.net/2011/12/01/curso-ado-net-con-mono-y-mysql-primeras-consultas/#comments</comments> <pubDate>Thu, 01 Dec 2011 14:15:26 +0000</pubDate> <dc:creator>F. Javier Carazo Gil</dc:creator> <category><![CDATA[Tutoriales]]></category> <category><![CDATA[ado.net]]></category> <category><![CDATA[curso]]></category> <category><![CDATA[datacolumn]]></category> <category><![CDATA[datarow]]></category> <category><![CDATA[dataset]]></category> <category><![CDATA[datatable]]></category> <category><![CDATA[mono]]></category> <category><![CDATA[mysql]]></category> <category><![CDATA[mysqlcommand]]></category> <guid
isPermaLink="false">http://www.linuxhispano.net/?p=8514</guid> <description><![CDATA[La clase que utilizaremos ahora será MySqlCommand y nuestra primera consulta, será una inserción sobre la base de datos. Insertaremos un registro más. La secuencia de pasos a efectuar es la siguiente: Creamos la consulta y la asignamos a una &#8230; <a
href="http://www.linuxhispano.net/2011/12/01/curso-ado-net-con-mono-y-mysql-primeras-consultas/">Continuar leyendo <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>La clase que utilizaremos ahora será <em>MySqlCommand</em> y nuestra primera consulta, será una inserción sobre la base de datos. Insertaremos un registro más. La secuencia de pasos a efectuar es la siguiente:</p><ol><li>Creamos la consulta y la asignamos a una cadena</li><li>Creamos el comando con la consulta que acabamos de crear</li><li>Asignamos la conexión pertinente al comando</li><li>Lo ejecutamos</li></ol><p>Ampliando nuestro ejemplo, quedaría así:</p><pre>public static void Main(string[] args)
{
	MySqlConnection conexion = new MySqlConnection();
	conexion.ConnectionString = "database=linuxhispano;
server=localhost;user id=root; pwd=contraseña";
	conexion.Open();
	try
	{
		string consulta = "INSERT INTO ejemplo (numero , tema)
 VALUES ('27', 'Sonido')";
		MySqlCommand comando = new MySqlCommand(consulta);
		comando.Connection = conexion;
		int resultado = comando.ExecuteNonQuery();
		Console.WriteLine("Filas afectadas : "
 + resultado.ToString());
	}
	catch(MySqlException exc)
	{
		Console.WriteLine("Ocurrió un error : " + exc.Message);
	}
	finally
	{
		conexion.Close();
	}
}</pre><p>Como se puede apreciar, hemos cuidado que se finalice la conexión aunque existan errores, con finally y hemos controlado los posibles errores que aparezcan. En nuestro caso debería decir: “Filas afectadas: 1”, puesto que la inserción sólo realiza una.</p><p><span
id="more-8514"></span></p><p>A la hora de realizar la inserción podríamos haber utilizado <em>MySqlParameter</em>, que nos provee de un mejor tratamiento de los datos de cara a mejorar la seguridad y ampliar las posibilidades, pero se escapaba del carácter introductorio de este texto.</p><p>Como veis hemos ejecutado el comando con el método <em>ExecuteNonQuery</em> que utilizaremos para operaciones de inserción, borrado y actualización. En el caso de consultas como tales con <em>SELECT</em>, utilizaremos <em>ExecuteReader</em> y en el caso que veremos a continuación, cuando trabajamos con escalares <em>ExecuteScalar</em>. No siempre es así y depende de lo que vayamos a hacer varía el método pero para este punto nos vale.</p><p>Las consultas que devuelven escalares son aquellas que devuelven un sólo número, por ejemplo, si preguntamos a la base de datos que nos cuente cuántas filas hay en la tabla. Veamos este ejemplo, el proceso es el mismo pero utilizamos ahora el método <em>ExecuteScalar</em> y cambiamos convenientemente la consulta. Utilizaremos el constructor de <em>MySqlCommand</em> para inicializar con la consulta y la conexión el objeto, de forma que nos ahorremos una sentencia:</p><pre>public static void Main(string[] args)
{
	MySqlConnection conexion = new MySqlConnection();
	conexion.ConnectionString = "database=linuxhispano;
server=localhost;user id=root; pwd=contraseña";
	conexion.Open();
	try
	{
		MySqlCommand comando = new MySqlCommand
("SELECT COUNT(*) FROM ejemplo", conexion);
		string resultado = comando.ExecuteScalar().ToString();
		Console.WriteLine("Filas en la tabla : " + resultado);
	}
	catch(MySqlException exc)
	{
		Console.WriteLine("Ocurrió un error : " + exc.Message);
	}
	finally
	{
		conexion.Close();
	}
}</pre><p>La salida por consola debe ser “Filas en la tabla: 3”. Finalmente, veamos cómo recorrer hacia adelante la tabla con <em>ExecuteReader()</em>. La metodología a seguir es ejecutar el comando con este método y posteriormente, imprimir por pantalla el resultado que va devolviendo el lector mientras haya filas que recorrer. El código lo tenéis a continuación:</p><pre>public static void Main(string[] args)
{
	MySqlConnection conexion = new MySqlConnection();
	conexion.ConnectionString = "database=linuxhispano;
server=localhost;user id=root; pwd=contraseña";
	conexion.Open();
	try
	{
		MySqlCommand comando = new MySqlCommand
("SELECT tema FROM ejemplo", conexion);
		MySqlDataReader lector = comando.ExecuteReader();
		while(lector.Read())
		{
			Console.WriteLine(lector.GetString(0));
		}
		lector.Close();
	}
	catch(MySqlException exc)
	{
		Console.WriteLine("Ocurrió un error : " + exc.Message);
	}
	finally
	{
		conexion.Close();
	}
}</pre><p>El resultado debería ser en tres líneas distintas, los tres temas que hay presentes en estos momentos en la base de datos. Pasadas estas primeras operaciones, en el siguiente punto vamos a rellenar un <em>DataSet</em> con los datos de la base de datos y vamos a recorrerlo a través de las clases: <em>DataTable</em>, <em>DataColumn</em> y <em>DataRow</em> antes de dar por terminado este artículo.</p> ]]></content:encoded> <wfw:commentRss>http://www.linuxhispano.net/2011/12/01/curso-ado-net-con-mono-y-mysql-primeras-consultas/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Curso ADO.NET con Mono y MySQL – DataSet, DataTable, DataColumn y DataRow</title><link>http://www.linuxhispano.net/2011/11/29/curso-ado-net-con-mono-y-mysql-%e2%80%93-dataset-datatable-datacolumn-y-datarow/</link> <comments>http://www.linuxhispano.net/2011/11/29/curso-ado-net-con-mono-y-mysql-%e2%80%93-dataset-datatable-datacolumn-y-datarow/#comments</comments> <pubDate>Tue, 29 Nov 2011 13:35:26 +0000</pubDate> <dc:creator>F. Javier Carazo Gil</dc:creator> <category><![CDATA[Tutoriales]]></category> <category><![CDATA[ado.net]]></category> <category><![CDATA[curso]]></category> <category><![CDATA[datacolumn]]></category> <category><![CDATA[datarow]]></category> <category><![CDATA[dataset]]></category> <category><![CDATA[datatable]]></category> <category><![CDATA[mono]]></category> <category><![CDATA[mysql]]></category> <guid
isPermaLink="false">http://www.linuxhispano.net/?p=8498</guid> <description><![CDATA[La potencia de ADO.NET es proporcional al número de conceptos que lo rodean, así que en esta entrada como hemos dicho haremos una visión introductoria, pero espero que suficiente para comenzar a profundizar más en el tema. Uno de los &#8230; <a
href="http://www.linuxhispano.net/2011/11/29/curso-ado-net-con-mono-y-mysql-%e2%80%93-dataset-datatable-datacolumn-y-datarow/">Continuar leyendo <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>La potencia de <a
href="http://www.linuxhispano.net/etiqueta/ado.net/" target="_blank">ADO.NET</a> es proporcional al número de conceptos que lo rodean, así que en esta entrada como hemos dicho haremos una visión introductoria, pero espero que suficiente para comenzar a profundizar más en el tema.</p><p>Uno de los aspectos esenciales de <a
href="http://www.linuxhispano.net/etiqueta/ado.net/" target="_blank">ADO</a>, como no podía ser de otra manera, es la interacción directa con los datos provenientes de las bases de datos. Para comenzar a operar con ello os presento estas cuatro clases: DataSet, DataTable, DataColumn y DataRow; conjunto de datos, tabla de datos, columna de datos y fila de datos, respectivamente.</p><p>Un conjunto de datos, es un objeto que almacena datos, en forma de tablas por ejemplo, y que pueden provenir de distintos orígenes. Una tabla de datos, es el objeto que almacena los datos de, una consulta, por ejemplo, en forma de tabla en la memoria y a la que podremos acceder, básicamente, a través de sus filas y columnas. Todas estas clases suelen tener una representación física en la base de datos, pero no tiene que ser así siempre, y podemos trabajar de manera asíncrona con la base de datos o directamente con datos provenientes de otras fuentes como por ejemplo ficheros XML.</p><p><span
id="more-8498"></span></p><p>Una de las ventajas de <a
href="http://www.linuxhispano.net/etiqueta/ado.net/" target="_blank">ADO</a> es lo transparente que hace al desarrollador el origen de los datos así como la interacción con los mismos, pues al hacer a través de objetos, el manejo en la aplicación es muy intuitivo. Llegados a este punto y para seguir progresando vamos a crear una tabla en la base de datos a la que le agregaremos una serie de registros, de manera que posteriormente podamos interactuar con ellos. Se tratará de una base de datos de revistas.</p><p>En la tabla almacenaremos sólo dos campos para el ejemplo: uno de tipo entero que representará el número de la revista, “numero”; y otro de tipo cadena donde almacenaremos la temática de ese número de revista, “tema”. El número será la clave primaria y ambos no podrán ser nulos.</p><p>Nos dirigimos de nuevo a la <em>shell </em>de MySQL y escribimos:</p><pre>CREATE TABLE `linuxhispano`.`ejemplo` (
`numero` INT NOT NULL ,
`tema` VARCHAR( 64 ) NOT NULL ,
PRIMARY KEY ( `numero` )
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci</pre><p>Como comprobaréis, además de indicar los campos he añadido a la tabla el motor a utilizar, ISAM y el juego de caracteres UTF-8 para evitar problemas de acentos y eñes, entre otros. Pasemos a agregar un par de registros:</p><pre>INSERT INTO `lpmagazine`.`ejemplo` (
`numero` ,
`tema`
)
VALUES (
'25', 'Gráficos'
);
INSERT INTO `linuxhispano`.`ejemplo` (
`numero` ,
`tema`
)
VALUES (
'26', 'Programación'
);</pre><p>Ya tenemos los datos en la base de datos. Nuestra labor ahora es conectarnos para realizar consultas sobre ellos. Veamos cómo.</p> ]]></content:encoded> <wfw:commentRss>http://www.linuxhispano.net/2011/11/29/curso-ado-net-con-mono-y-mysql-%e2%80%93-dataset-datatable-datacolumn-y-datarow/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Comprobar de qué tipo es una variable u objeto en C#</title><link>http://www.linuxhispano.net/2011/10/31/comprobar-de-que-tipo-es-una-variable-u-objeto-en-c/</link> <comments>http://www.linuxhispano.net/2011/10/31/comprobar-de-que-tipo-es-una-variable-u-objeto-en-c/#comments</comments> <pubDate>Mon, 31 Oct 2011 14:03:44 +0000</pubDate> <dc:creator>F. Javier Carazo Gil</dc:creator> <category><![CDATA[Tutoriales]]></category> <category><![CDATA[.net]]></category> <category><![CDATA[c]]></category> <category><![CDATA[c sharp]]></category> <category><![CDATA[carácter]]></category> <category><![CDATA[char]]></category> <category><![CDATA[curso]]></category> <category><![CDATA[dato]]></category> <category><![CDATA[decimal]]></category> <category><![CDATA[entero]]></category> <category><![CDATA[float]]></category> <category><![CDATA[flotante]]></category> <category><![CDATA[linux+]]></category> <category><![CDATA[mono]]></category> <category><![CDATA[monodevelop]]></category> <category><![CDATA[número]]></category> <category><![CDATA[objeto]]></category> <category><![CDATA[programación]]></category> <category><![CDATA[single]]></category> <category><![CDATA[tipo]]></category> <category><![CDATA[unicode]]></category> <guid
isPermaLink="false">http://www.linuxhispano.net/?p=8073</guid> <description><![CDATA[Cuando tenemos un objeto de tipo genérico Object en C#, podemos hacer con él las operaciones básicas de cada objeto pero en ocasiones, necesitaremos convertirlo en un objeto menos abstracto para poder hacer operaciones más concretas. Aunque esta entrada no &#8230; <a
href="http://www.linuxhispano.net/2011/10/31/comprobar-de-que-tipo-es-una-variable-u-objeto-en-c/">Continuar leyendo <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Cuando tenemos un objeto de tipo genérico <a
target="_blank" href="http://msdn.microsoft.com/es-es/library/system.object(v=vs.80).aspx" target="_blank">Object</a> en C#, podemos hacer con él las operaciones básicas de cada objeto pero en ocasiones, necesitaremos convertirlo en un objeto menos abstracto para poder hacer operaciones más concretas.</p><p>Aunque esta entrada no forma parte del <a
href="http://www.linuxhispano.net/cursos/curso-c-con-mono/" target="_blank">curso de Mono</a>, sí está muy relacionada con <a
href="http://www.linuxhispano.net/2010/10/29/curso-c-con-mono-tipos-de-datos-y-uso-de-referencias/" target="_blank">esta entrega dedicada a tipos de datos</a>.</p><p>Si tenemos una variable u objeto y no sabemos su tipo con seguridad, disponemos de dos métodos que usaremos para ver cuál es realmente el tipo del mismo. Veamos:</p><ul><li><a
target="_blank" href="http://msdn.microsoft.com/es-es/library/system.object.gettype.aspx" target="_blank">getType()</a>: obtiene el tipo de la instancia actual</li><li><a
target="_blank" href="http://msdn.microsoft.com/en-us/library/system.type.gettype.aspx" target="_blank">Type.GetType(&#8220;tipo de objeto&#8221;)</a>: lo usamos para obtener una referencia con la que comparar</li></ul><p>Por ejemplo, ¿cómo saber si el objeto &#8220;auxiliar&#8221; es un entero con signo de 32 bits (el entero más estándar, el que usamos al poner <em>int </em>simplemente)?</p><p><span
id="more-8073"></span></p><pre>if(auxiliar.GetType() == Type.GetType("System.Int32"))
   return true;
else
   return false;</pre><p>Al igual que con enteros, podemos hacer la comprobación para cualquier tipo:</p><ul><li><a
target="_blank" href="http://msdn.microsoft.com/en-us/library/system.boolean.aspx" target="_blank">Boolean</a>: valor booleano</li><li><a
target="_blank" href="http://msdn.microsoft.com/en-us/library/system.byte.aspx" target="_blank">Byte</a>: ocho bits sin signo</li><li><a
target="_blank" href="http://msdn.microsoft.com/en-us/library/system.char.aspx" target="_blank">Char</a>: carácter UNICODE</li><li><a
target="_blank" href="http://msdn.microsoft.com/en-us/library/system.datetime.aspx" target="_blank">DateTime</a>: fecha con tiempo</li><li><a
target="_blank" href="http://msdn.microsoft.com/en-us/library/system.decimal.aspx" target="_blank">Decimal</a>: número decimal</li><li><a
target="_blank" href="http://msdn.microsoft.com/en-us/library/system.double.aspx" target="_blank">Double</a>: pnto flotante de precisión doble</li><li><a
target="_blank" href="http://msdn.microsoft.com/en-us/library/system.int16.aspx" target="_blank">Int16</a>: entero con signo de 16 bits</li><li><a
target="_blank" href="http://msdn.microsoft.com/en-us/library/system.int32.aspx" target="_blank">Int32</a>: ídem pero de 32 bits</li><li><a
target="_blank" href="http://msdn.microsoft.com/en-us/library/system.int64.aspx" target="_blank">Int64</a>: ídem pero de 64 bits</li><li><a
target="_blank" href="http://msdn.microsoft.com/en-us/library/system.sbyte.aspx" target="_blank">SByte</a>:  8 bits con signo</li><li><a
target="_blank" href="http://msdn.microsoft.com/en-us/library/system.single.aspx" target="_blank">Single</a>: punto flotante de precisión simple</li><li><a
target="_blank" href="http://msdn.microsoft.com/en-us/library/system.uint16.aspx" target="_blank">UInt16</a>: entero sin signo de 16 bits</li><li><a
target="_blank" href="http://msdn.microsoft.com/en-us/library/system.uint32.aspx" target="_blank">UInt32</a>: ídem pero de 32 bits</li><li><a
target="_blank" href="http://msdn.microsoft.com/en-us/library/system.uint64.aspx" target="_blank">UInt64</a>: ídem pero de 64 bits</li></ul> ]]></content:encoded> <wfw:commentRss>http://www.linuxhispano.net/2011/10/31/comprobar-de-que-tipo-es-una-variable-u-objeto-en-c/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Curso ADO.NET con Mono y MySQL – Creación del proyecto</title><link>http://www.linuxhispano.net/2011/10/27/curso-ado-net-con-mono-y-mysql-%e2%80%93-creacion-del-proyecto/</link> <comments>http://www.linuxhispano.net/2011/10/27/curso-ado-net-con-mono-y-mysql-%e2%80%93-creacion-del-proyecto/#comments</comments> <pubDate>Thu, 27 Oct 2011 13:30:26 +0000</pubDate> <dc:creator>F. Javier Carazo Gil</dc:creator> <category><![CDATA[Tutoriales]]></category> <category><![CDATA[ado.net]]></category> <category><![CDATA[bases de datos]]></category> <category><![CDATA[c]]></category> <category><![CDATA[curso]]></category> <category><![CDATA[datos]]></category> <category><![CDATA[linux+]]></category> <category><![CDATA[miguel de icaza]]></category> <category><![CDATA[mono]]></category> <category><![CDATA[mysql]]></category> <category><![CDATA[proyecto]]></category> <guid
isPermaLink="false">http://www.linuxhispano.net/?p=8044</guid> <description><![CDATA[Nos dirigimos a MonoDevelop y creamos una solución nueva, en C#, para consola. Elegís el nombre, el que le he puesto para el ejemplo es: ejemplo_mono_ado. Os aparecerá en pantalla un fichero de nombre: Main.cs junto a un árbol a la &#8230; <a
href="http://www.linuxhispano.net/2011/10/27/curso-ado-net-con-mono-y-mysql-%e2%80%93-creacion-del-proyecto/">Continuar leyendo <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Nos dirigimos a <a
target="_blank" href="http://es.wikipedia.org/wiki/MonoDevelop" target="_blank">MonoDevelop</a> y creamos una solución nueva, en C#, para consola. Elegís el nombre, el que le he puesto para el ejemplo es: <em>ejemplo_mono_ado. </em>Os aparecerá en pantalla un fichero de nombre: <em>Main.cs</em> junto a un árbol a la izquierda con características de la solución. Una de ellas, las referencias es donde importaremos el ensamblado.</p><p>Antes de seguir sería conveniente que copiarais al directorio del proyecto el fichero “mysql.data.dll” que venía dentro del paquete comprimido del <a
href="http://www.linuxhispano.net/2011/10/20/curso-ado-net-con-mono-y-mysql-%E2%80%93-preparacion-e-instalacion/" target="_blank">conector</a>. Os dirigís a referencias y haciendo clic sobre el mismo título “Referencias”, elegís “Editar referencias&#8230;”. De las tres pestañas que aparecen en el diálogo elegís “Ensamblado .NET” y os dirigís al directorio del proyecto o donde tengáis guardado el fichero. Lo elegís y lo añadís.</p><p><a
href="http://www.linuxhispano.net/wp-content/uploads/2011/10/aspecto_interfaz_monodevelop.png"><img
class="aligncenter size-full wp-image-8045" title="aspecto_interfaz_monodevelop" src="http://www.linuxhispano.net/wp-content/uploads/2011/10/aspecto_interfaz_monodevelop.png" alt="Aspecto interfaz MonoDevelop" width="640" height="387" /></a></p><p><span
id="more-8044"></span></p><p>Desde este momento tenéis referenciado el conector dentro de vuestro programa. Ahora el siguiente paso es importarlo al fichero <em>Main.cs. </em>Para ello escribís debajo de “<em>using System; </em>”, “<em>using MySql.Data.MySqlClient;</em>”. El archivo quedaría así:</p><pre>using System;
using MySql.Data.MySqlClient;
namespace ejemplo_mono_ado
{
	class MainClass
	{
		public static void Main(string[] args)
		{
			Console.WriteLine("¡Hola Mundo!");
// Hola Mundo inicial creado por el IDE
		}
	}
}</pre><p>Con ésto ya tendríamos el espacio de nombres del conector <a
target="_blank" href="http://es.wikipedia.org/wiki/MySQL" target="_blank">MySQL</a> disponible en nuestro código por lo que a partir de ahora sí que podríamos tratar con las clases del mismo.</p> ]]></content:encoded> <wfw:commentRss>http://www.linuxhispano.net/2011/10/27/curso-ado-net-con-mono-y-mysql-%e2%80%93-creacion-del-proyecto/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>Curso ADO.NET con Mono y MySQL – Preparación e instalación</title><link>http://www.linuxhispano.net/2011/10/20/curso-ado-net-con-mono-y-mysql-%e2%80%93-preparacion-e-instalacion/</link> <comments>http://www.linuxhispano.net/2011/10/20/curso-ado-net-con-mono-y-mysql-%e2%80%93-preparacion-e-instalacion/#comments</comments> <pubDate>Thu, 20 Oct 2011 13:15:39 +0000</pubDate> <dc:creator>F. Javier Carazo Gil</dc:creator> <category><![CDATA[Tutoriales]]></category> <category><![CDATA[ado.net]]></category> <category><![CDATA[bases de datos]]></category> <category><![CDATA[c]]></category> <category><![CDATA[curso]]></category> <category><![CDATA[datos]]></category> <category><![CDATA[linux+]]></category> <category><![CDATA[miguel de icaza]]></category> <category><![CDATA[mono]]></category> <category><![CDATA[mysql]]></category> <guid
isPermaLink="false">http://www.linuxhispano.net/?p=7995</guid> <description><![CDATA[Pasado más de un mes desde la entrada que anunciaba este curso, volvemos a la carga, veamos. Antes de nada, de forma básica, vamos a revisar qué necesitamos, cómo obtenerlo y en caso necesario, cómo configurarlo. En este momento ,creo &#8230; <a
href="http://www.linuxhispano.net/2011/10/20/curso-ado-net-con-mono-y-mysql-%e2%80%93-preparacion-e-instalacion/">Continuar leyendo <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Pasado más de un mes desde la entrada que anunciaba este curso, volvemos a la carga, veamos.</p><p>Antes de nada, de forma básica, vamos a revisar qué necesitamos, cómo obtenerlo y en caso necesario, cómo configurarlo. En este momento ,creo conveniente señalar que utilizaremos <a
target="_blank" href="http://es.wikipedia.org/wiki/MonoDevelop" target="_blank">MonoDevelop</a>,el entorno de desarrollo integrado para <a
target="_blank" href="http://es.wikipedia.org/wiki/Proyecto_Mono" target="_blank">Mono</a> más popular, en lugar de utilizar directamente el compilador, <em>mcs</em>; para centrarnos directamente en el desarrollo con <a
target="_blank" href="http://es.wikipedia.org/wiki/ActiveX_Data_Objects" target="_blank">ADO</a> y dejar de lado los detalles que no son necesarios.</p><p
style="text-align: center;"><a
href="http://www.linuxhispano.net/wp-content/uploads/2011/10/MonoDevelopLogo.png"><img
class="aligncenter size-full wp-image-7998" title="MonoDevelopLogo" src="http://www.linuxhispano.net/wp-content/uploads/2011/10/MonoDevelopLogo.png" alt="Logo MonoDevelop" width="256" height="256" /></a></p><p><strong>Mono y MonoDevelop</strong></p><p>En función de la distribución que utilicéis, las circunstancias particulares cambiaran, pero básicamente os comento dos alternativas que probablemente os sirvan prácticamente a todos. La primera es dirigiros a vuestro gestor de paquetes y buscar los paquetes correspondientes. Como <em>monodevelop, </em>que será más o menos así el nombre del paquete, depende de <a
target="_blank" href="http://es.wikipedia.org/wiki/Proyecto_Mono" target="_blank">Mono</a>, si elegís éste se os seleccionaran los demás paquetes necesarios para desarrollar y ejecutar programas con <a
target="_blank" href="http://es.wikipedia.org/wiki/Proyecto_Mono" target="_blank">Mono</a>. Es decir, básicamente instalando <a
target="_blank" href="http://es.wikipedia.org/wiki/MonoDevelop" target="_blank">MonoDevelop</a> a través del paquete homónimo, tendréis todo preparado. Además, es más que probable que tengáis instalado Mono en vuestro equipo por defecto. Por ejemplo, el entorno de escritorio Gnome utiliza esta tecnología ampliamente.</p><p><span
id="more-7995"></span></p><p>La segunda solución, la más larga y menos recomendable es instalar Mono compilando el código fuente. Necesitaremos tener instalados: cmpilador de C (gcc), Bison y las librerías de desarrollo para glib. Descargaremos el código fuente desde la sección de descargas del <a
target="_blank" href="http://es.wikipedia.org/wiki/Proyecto_Mono" target="_blank">Proyecto Mono</a> (pondrá algo así como <a
target="_blank" href="http://es.wikipedia.org/wiki/Proyecto_Mono" target="_blank">Mono</a> el número de la versión seguido de “sources”). Utilizaremos el directorio “/opt” para evitar problemas. Más o menos el proceso de instalación sería:</p><ol><li>Descomprimimos y desempaquetamos el código fuente, gráficamente o mediante la consola: <em>$ tar zxvf mono-X.XX.tar.gz</em></li><li>Configuramos los archivos para realizar el <em>make</em>: <em>$ ./configure &#8211;prefix=/opt/mono</em></li><li>Ejecutamos <em>make </em>para ejecutar el código fuente: <em>$</em> <em>make</em></li><li>Finalmente instalamos: <em>$ sudo make install</em></li></ol><p>Tras la instalación deberemos configurar debidamente las variables de entorno. Para ello ejecutamos desde la terminal:</p><pre>$ export PATH=$PATH:/opt/mono/bin
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/mono/lib
$ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/mono/lib/pkgconfig
$ export MONO_PATH=/opt/mono/lib</pre><p>Una vez ya tenemos instalado <a
target="_blank" href="http://es.wikipedia.org/wiki/Proyecto_Mono" target="_blank">Mono</a>, pasamos a instalar <a
target="_blank" href="http://es.wikipedia.org/wiki/MonoDevelop" target="_blank">MonoDevelop</a> de una forma análoga. Accedemos al sitio de <a
target="_blank" href="http://es.wikipedia.org/wiki/MonoDevelop" target="_blank">MonoDevelop</a>, descargamos el código fuente y:</p><ol><li>Desempaquetamos el código fuente y lo descomprimimos: <em>$ tar zxvf monodevelop-X.X.tar.bz2</em></li><li>Configuramos para crear el <em>make</em>: ./configure &#8211;prefix=`pkg-config &#8211;variable=prefix mono`</li><li>Compilamos: <em>$ make </em></li><li>Instalamos: <em>$</em> <em>make install</em></li></ol><p>Ya tendríamos esta parte lista, pero como dije antes, mucho mejor utilizar el sistema gestor de paquetes para evitar problemas derivados de no poder actualizar tan fácilmente o por ejemplo, las dependencias insatisfechas.</p><p
style="text-align: center;"><a
href="http://www.linuxhispano.net/wp-content/uploads/2011/10/MySQL1.png"><img
class="aligncenter size-full wp-image-8000" title="MySQL" src="http://www.linuxhispano.net/wp-content/uploads/2011/10/MySQL1.png" alt="Logo MySQL" width="512" height="265" /></a></p><p><strong>MySQL</strong></p><p>De igual manera instalaremos el servidor <a
target="_blank" href="http://es.wikipedia.org/wiki/MySQL" target="_blank">MySQL</a> al que nos conectaremos desde nuestra aplicación con C#. Dado que hay gran cantidad de tutoriales y manuales en la red, voy a ser bastante breve. Básicamente deberéis buscar en vuestro gestor de repositorios el paquete <em>mysql-server</em> y ya tendréis el servidor de base de datos instalado.</p><p><strong>Conector</strong></p><p>Finalmente, descargaremos el fichero con el conector de <a
target="_blank" href="http://es.wikipedia.org/wiki/MySQL" target="_blank">MySQL</a> para <a
target="_blank" href="http://es.wikipedia.org/wiki/Microsoft_.NET" target="_blank">.NET</a> y Mono. Es un fichero con extensión <em>.dll</em>, que es la extensión con que suelen ser almacenados los ensamblados, como es el caso de <a
target="_blank" href="http://es.wikipedia.org/wiki/Microsoft_.NET" target="_blank">.NET</a>/<a
target="_blank" href="http://es.wikipedia.org/wiki/Proyecto_Mono" target="_blank">Mono</a>. Si queréis saber más sobre ensamblados, el CLI, o cualquier otro detalle más técnico propio de <a
target="_blank" href="http://es.wikipedia.org/wiki/Microsoft_.NET" target="_blank">.NET</a>/<a
target="_blank" href="http://es.wikipedia.org/wiki/Proyecto_Mono" target="_blank">Mono</a>, podéis visitar la Wikipedia (preferiblemente en inglés) o la <a
target="_blank" href="http://msdn.microsoft.com/es-es/ms348103" target="_blank">MSDN</a> (antes también <a
target="_blank" href="http://www.mono-hispano.org/" target="_blank">Mono-Hispano</a> pero ahora mismo parece que no está accesible). Aunque no sea el objetivo de este artículo definiré brevemente dichos conceptos para que quede algo más claro. Podríamos decir que un ensamblado en <a
target="_blank" href="http://es.wikipedia.org/wiki/Proyecto_Mono" target="_blank">Mono</a> es un conjunto de clases implementadas junto con sus metadatos correspondientes para ser utilizados, recogidos en un fichero que puede ser llamado desde un proyecto <a
target="_blank" href="http://es.wikipedia.org/wiki/Proyecto_Mono" target="_blank">Mono</a>.</p><p>En el caso que nos ocupa utilizaremos una implementación de la arquitectura ADO.NET creada por el propio proyecto <a
target="_blank" href="http://es.wikipedia.org/wiki/MySQL" target="_blank">MySQL</a> para posibilitar una comunicación lo más nativa e integrada posible entre aplicaciones desarrolladas con <a
target="_blank" href="http://es.wikipedia.org/wiki/Microsoft_.NET" target="_blank">.NET</a>/<a
target="_blank" href="http://es.wikipedia.org/wiki/Proyecto_Mono" target="_blank">Mono</a> y <a
target="_blank" href="http://es.wikipedia.org/wiki/MySQL" target="_blank">MySQL</a>. El conector, que así se llama, podéis encontrarlo en la web de <a
target="_blank" href="http://es.wikipedia.org/wiki/MySQL" target="_blank">MySQL</a> (<a
target="_blank" href="http://dev.mysql.com/downloads/connector/net/">http://dev.mysql.com/downloads/connector/net/</a>).</p><p>Una vez nos encontremos en el sitio, descargamos los ficheros para Windows sin instalador (un fichero .zip con varios ensamblados), lo descomprimimos y ya tendremos todo preparado para comenzar el proyecto.</p><p>Antes de continuar un detalle importante. Microsoft Windows no es <em>case sensitive</em>, sensible a mayúsculas/minúsculas, en cuanto a rutas, pero GNU/Linux sí lo es, por lo que deberéis renombrar los ficheros dll que utilicemos conforme se llaman en el programa que será: “MySql.Data” en lugar de “mysql.data” como vienen nombrados por defectos (los demás también de manera análoga).</p><p>&nbsp;</p> ]]></content:encoded> <wfw:commentRss>http://www.linuxhispano.net/2011/10/20/curso-ado-net-con-mono-y-mysql-%e2%80%93-preparacion-e-instalacion/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>Curso ADO.NET con Mono y MySQL – Introducción</title><link>http://www.linuxhispano.net/2011/09/19/curso-ado-net-con-mono-y-mysql-%e2%80%93-introduccion/</link> <comments>http://www.linuxhispano.net/2011/09/19/curso-ado-net-con-mono-y-mysql-%e2%80%93-introduccion/#comments</comments> <pubDate>Mon, 19 Sep 2011 13:15:01 +0000</pubDate> <dc:creator>F. Javier Carazo Gil</dc:creator> <category><![CDATA[Tutoriales]]></category> <category><![CDATA[ado.net]]></category> <category><![CDATA[c]]></category> <category><![CDATA[curso]]></category> <category><![CDATA[mono]]></category> <category><![CDATA[mysql]]></category> <guid
isPermaLink="false">http://www.linuxhispano.net/?p=7566</guid> <description><![CDATA[El desarrollo de software es una labor en la que intervienen tal cantidad de variables que debemos siempre conocer el mayor número de tecnologías distintas para poder dar siempre la mejor respuesta en cada caso. Muy frecuentemente, es necesario desarrollar &#8230; <a
href="http://www.linuxhispano.net/2011/09/19/curso-ado-net-con-mono-y-mysql-%e2%80%93-introduccion/">Continuar leyendo <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>El desarrollo de software es una labor en la que intervienen tal cantidad de variables que debemos siempre conocer el mayor número de tecnologías distintas para poder dar siempre la mejor respuesta en cada caso. Muy frecuentemente, es necesario desarrollar un sistema software que sea multiplataforma, a la vez que trate con muchos datos situados en un servidor de datos ajeno. Para estos casos es idóneo utilizar el binomio <a
target="_blank" href="http://es.wikipedia.org/wiki/Proyecto_Mono" target="_blank">Mono</a> y <a
target="_blank" href="http://es.wikipedia.org/wiki/Mysql" target="_blank">MySQL</a>.</p><p>Las facilidades que provee una tecnología multiplataforma de alto nivel como Mono, unido a la integración en el mismo de <a
target="_blank" href="http://es.wikipedia.org/wiki/Mysql" target="_blank">MySQL</a> a través de un conector nativo para <a
target="_blank" href="http://es.wikipedia.org/wiki/Ado.net" target="_blank">ADO.NET</a>, hacen que tengamos al alcance de nuestra mano un binomio de software libre con una potencia envidiable. Siempre tenemos otras opciones también libres, como Java en el caso de tecnología de desarrollo multiplataforma; y otras bases de datos como <a
target="_blank" href="http://es.wikipedia.org/wiki/PostgreSQL">PostgreSQL</a> para arquitecturas cliente-servidor, o <a
target="_blank" href="http://es.wikipedia.org/wiki/SQLite">SQLite</a> para máquinas locales, que gozan de muy buena salud.</p><p>A lo largo de este curso explicaremos de una manera introductoria el uso de <a
target="_blank" href="http://es.wikipedia.org/wiki/Ado.net" target="_blank">ADO.NET</a>; y lo utilizaremos a través de un interfaz en modo texto. Sin lugar a dudas, las personas que hayan programado anteriormente para la .NET Framework de Microsoft en Windows, conocerán bastantes de los detalles que aquí relatamos y es que como ya muchos sabréis, Mono es una implementación libre de esta plataforma.</p><p><strong>Mono, MySQL y ADO.NET</strong></p><p>Vamos a ser breves en la presentación de las herramientas con las que vamos a tratar, pero siempre considero útil situar al lector, para que en caso de que no conozca las herramientas sepa situarse en un contexto apropiado.</p><p>Mono es un proyecto libre, creado por <a
target="_blank" href="http://es.wikipedia.org/wiki/Ximian" target="_blank">Ximian</a> en su día y actualmente impulsado por Novell tras la compra de la primera por parte de la segunda, que ofrece una serie de herramientas libres que cumplen las especificaciones de .NET. La figura más destacada del Proyecto Mono es Miguel de Icaza, cofundador de <a
target="_blank" href="http://es.wikipedia.org/wiki/Gnome" target="_blank">Gnome</a>, hombre fuerte en Novell y una persona un tanto polémica dentro del software libre por sus aportaciones a la vez que sus acercamientos a Microsoft.</p><p>MySQL como sabréis, es el sistema gestor de base de datos creado por una empresa del mismo nombre y que posteriormente ha sido adquirido por Sun Microsystems, y recientemente por Oracle. Su popularidad en la red gracias al binomio que forma con PHP la han llevado a convertirse en la base de datos más conocidas del mundo web y una de las alternativas libres más eficaces en este tema.</p><p>Finalmente, ADO.NET, es un conjunto de componentes que permiten acceder a datos y a servicios de datos, a través de un arquitectura completa que facilita enormemente ciertas labores al desarrollador. Está integrado dentro de Mono y existe un conector creado ex profeso para ligar a MySQL con Mono/.NET a través de esta arquitectura. Existen otras alternativas similares como Hibernate que nunca está de más conocer.</p> ]]></content:encoded> <wfw:commentRss>http://www.linuxhispano.net/2011/09/19/curso-ado-net-con-mono-y-mysql-%e2%80%93-introduccion/feed/</wfw:commentRss> <slash:comments>10</slash:comments> </item> <item><title>Enviar correos con C# usando Mono</title><link>http://www.linuxhispano.net/2011/06/06/enviar-correos-con-c-usando-mono/</link> <comments>http://www.linuxhispano.net/2011/06/06/enviar-correos-con-c-usando-mono/#comments</comments> <pubDate>Mon, 06 Jun 2011 13:00:20 +0000</pubDate> <dc:creator>F. Javier Carazo Gil</dc:creator> <category><![CDATA[Tutoriales]]></category> <category><![CDATA[c]]></category> <category><![CDATA[cliente]]></category> <category><![CDATA[correo]]></category> <category><![CDATA[enviar]]></category> <category><![CDATA[mono]]></category> <category><![CDATA[servidor]]></category> <category><![CDATA[smtp]]></category> <guid
isPermaLink="false">http://www.linuxhispano.net/?p=6439</guid> <description><![CDATA[Si necesitáis conectaros a un servidor SMTP para hacer envíos de correos desde una aplicación que corre Mono, os dejo el código siguiente que seguro que os es de utilidad. Este ejemplo en concreto envía un mensaje usando un SMTP &#8230; <a
href="http://www.linuxhispano.net/2011/06/06/enviar-correos-con-c-usando-mono/">Continuar leyendo <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Si necesitáis conectaros a un servidor <a
target="_blank" href="http://es.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol" target="_blank">SMTP </a>para hacer envíos de correos desde una aplicación que corre <a
href="http://www.linuxhispano.net/curso-c-con-mono/">Mono</a>, os dejo el código siguiente que seguro que os es de utilidad. Este ejemplo en concreto envía un mensaje usando un SMTP que requiere autenticación, si necesitáis alguna variantes: varios destinatarios, SMTP sin autenticación o cualquier otra cosa, ¡preguntad en los comentarios!</p><pre>public static void Main (string[] args)
{
	MailAddress para = new MailAddress("para@direccion.com");
	MailAddress desde = new MailAddress("desde@direccion");
	MailMessage mensaje = new MailMessage(desde, para);
	mensaje.Subject = "Asunto";
	mensaje.Body = @"Cuerpo del correo";
	SmtpClient cliente = new SmtpClient("direccion_servidor", puerto);
	cliente.Credentials = new System.Net.NetworkCredential
("nombre_usuario", "contraseña_usuario");
	Console.WriteLine("Enviando mensaje de correo para: " + para.User
 + " en " + para.Host + " usando el servidor=" + cliente.Host + ".");
      	try {
	  cliente.Send(mensaje);
	  Console.WriteLine("Mensaje enviado");
	}
	catch (Exception ex) {
	  Console.WriteLine("Problemas enviando mensaje: " + ex.ToString());
	 }
}</pre><p>Tened en cuenta que estamos trabajando con el espacio de nombres del ensamblado: <em>System.Net.Mail</em>.</p><p>Como veis el procedimiento es simple:</p><ol><li>Se crean dos objetos para las direcciones de correo</li><li>Se crea el mensaje en sí</li><li>Se instancia el cliente SMTP, inicializando las credenciales</li><li>Para finalmente llamar al método de envío</li></ol><p>Respondemos las dudas y sugerencias en los comentarios.</p> ]]></content:encoded> <wfw:commentRss>http://www.linuxhispano.net/2011/06/06/enviar-correos-con-c-usando-mono/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Curso C# con Mono &#8211; Interfaces</title><link>http://www.linuxhispano.net/2011/01/24/curso-c-con-mono-interfaces/</link> <comments>http://www.linuxhispano.net/2011/01/24/curso-c-con-mono-interfaces/#comments</comments> <pubDate>Mon, 24 Jan 2011 12:24:26 +0000</pubDate> <dc:creator>F. Javier Carazo Gil</dc:creator> <category><![CDATA[Tutoriales]]></category> <category><![CDATA[c]]></category> <category><![CDATA[clases]]></category> <category><![CDATA[curso]]></category> <category><![CDATA[interfaces]]></category> <category><![CDATA[mono]]></category> <category><![CDATA[programación]]></category> <guid
isPermaLink="false">http://www.linuxhispano.net/?p=4845</guid> <description><![CDATA[Si la última vez que hablamos de C#, estuvimos comentando la herencia, hoy hablaremos de las interfaces. Interfaces en lenguajes de programación orientados a objetos Todos conoceréis las interfaces gráficas de usuario. Son el mecanismo software que nos permite interactuar &#8230; <a
href="http://www.linuxhispano.net/2011/01/24/curso-c-con-mono-interfaces/">Continuar leyendo <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Si la última vez que hablamos de C#, estuvimos comentando <a
target="_blank" href="http://www.linuxhispano.net/2011/01/04/curso-c-con-mono-herencia/" target="_blank">la herencia</a>, hoy hablaremos de <a
href="http://en.wikipedia.org/wiki/Interface_(computer_science)#Software_interfaces_in_object_oriented_languages" target="_blank">las interfaces</a>.</p><p><strong>Interfaces en lenguajes de programación orientados a objetos</strong></p><p>Todos conoceréis las interfaces gráficas de usuario. Son el mecanismo software que nos permite interactuar de manera más o menos intuitiva con unas funcionalidades que nos provee el programa. Es decir, es un mecanismo de comunicar distintos niveles, ocultando los detalles de la implementación.</p><p>Eso mismo son las interfaces en lenguajes de programación orientados a objetos como son C# o <a
target="_blank" href="http://es.wikipedia.org/wiki/Interfaz_(Java)" target="_blank">Java</a>. Se trata de un conjunto de métodos, delegados o eventos, que no tienen implementación. El desarrollo de la funcionalidad de los mismos, se hace en la clase que implementa la interfaz. Es un concepto similar a los prototipos de funciones en lenguajes como C.</p><p><strong>Declaración</strong></p><p>Siguiendo con el ejemplo de los motores, comentado <a
href="http://www.linuxhispano.net/2011/01/04/curso-c-con-mono-herencia/" target="_blank">en la entrega anterior dedicada a la herencia</a>, vamos a crear un interfaz IMotor, a la que luego haremos referencia desde la implementación de la clase. He incluido un método más para que se vean más claras las posibilidades.</p><pre name="code" class="c-sharp">interface IMotor
{
	// declaración de propiedades
	int Potencia
	{
      		get;
      		set;
 	}
	decimal Par
  	{
      		get;
      		set;
   	}
	// declaración de métodos
	void printInfo();
	// declaración de eventos
}
public class Motor : IMotor
{
	int potencia;
	decimal par;
	public int Potencia {
		get { return this.potencia; }
		set { potencia = value;	}
	}
	public decimal Par {
		get { return this.par; }
		set { par = value; }
	}
	public void printInfo()
	{
		Console.WriteLine("La potencia es " + Potencia.ToString() + "
                y el par: " + Par.ToString());
	}
}</pre><p>Como podéis apreciar, la declaración de los interfaces es muy similar a la de una clase, incluyendo la palabra clave <em>Interface</em>. La llamada al interfaz desde la clase que lo implementa se realiza como si de una herencia se tratara.</p><p><strong>Los interfaces también soportan herencia</strong> por si mismos. El único detalle a recordar, es que en caso de conflicto por duplicidad de nombres (un interfaz hereda de otros interfaces en los que hay un método con el mismo nombre en los dos), hay que hacer referencia explícita a cuál se está llamando:</p><ul><li><em>interfazA.método()</em></li><li><em>interfazB.método()</em></li></ul><p><strong>¿Para qué sirven?</strong></p><p>Más que para qué sirven voy a comentar para qué los uso en mis desarrollos. Aunque para clases pequeñas no tenga mucho sentido hacerlo, cuando los objetos cogen cierto tamaño, las interfaces facilitan enormemente la comprobación de errores. Por ejemplo, si se nos ha olvidado definir un método o si hay conflictos de tipos de datos, el compilador nos avisa. Recordad lo cómodo e inmediato que es declarar interfaces, en lugar de las clases directamente, con todo el desarrollo que conlleva.</p><p>Al fin y al cabo, es otra forma más de crear un mayor grado de abstracción y poder explotar mejor las posibilidades que nos ofrecen la orientación a objetos.</p><p><strong>Entregas anteriores</strong></p><ul><li><a
href="http://www.linuxhispano.net/2010/12/23/curso-c-con-mono-%E2%80%93-tratamiento-de-excepciones/" target="_blank">Curso C# con Mono – Tratamiento de excepciones</a></li><li><a
href="http://www.linuxhispano.net/2010/12/11/curso-c-con-mono-conversion-de-tipos-e-informacion-cultural/" target="_blank">Curso C# con Mono – Conversión de tipos e información cultural</a></li><li><a
href="http://www.linuxhispano.net/2010/12/04/curso-c-con-mono-%E2%80%93-declaracion-de-clases-y-estructuras/" target="_blank">Curso C# con Mono – Declaración de clases y estructuras</a></li><li><a
href="http://www.linuxhispano.net/2010/11/19/curso-c-con-mono-%E2%80%93-espacio-de-nombres-y-regiones/" target="_blank">Curso C# con Mono – Espacio de nombres y regiones</a></li><li><a
href="http://www.linuxhispano.net/2010/11/15/curso-c-con-mono-%E2%80%93-ensamblados/" target="_blank">Curso C# con Mono – Ensamblados</a></li><li><a
title="Enlace a Curso C# con Mono – Variables y constantes" rel="bookmark" href="http://www.linuxhispano.net/2010/11/02/curso-c-con-mono-%e2%80%93-variables-y-constantes/">Curso C# con Mono – Variables y constantes</a></li><li><a
title="Enlace a Curso C# con Mono – Tipos de datos y uso de referencias" rel="bookmark" href="http://www.linuxhispano.net/2010/10/29/curso-c-con-mono-tipos-de-datos-y-uso-de-referencias/">Curso C# con Mono – Tipos de datos y uso de referencias</a></li><li><a
title="Enlace a Curso C# con Mono – ¡Hola Mundo!" rel="bookmark" href="http://www.linuxhispano.net/2010/10/21/curso-c-con-mono-%c2%a1hola-mundo/">Curso C# con Mono – ¡Hola Mundo!</a></li><li><a
href="http://www.linuxhispano.net/2011/01/24/curso-c-con-mono-interfaces/" target="_blank">Curso C# con Mono – Interfaces</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://www.linuxhispano.net/2011/01/24/curso-c-con-mono-interfaces/feed/</wfw:commentRss> <slash:comments>7</slash:comments> </item> <item><title>Curso C# con Mono &#8211; Herencia</title><link>http://www.linuxhispano.net/2011/01/04/curso-c-con-mono-herencia/</link> <comments>http://www.linuxhispano.net/2011/01/04/curso-c-con-mono-herencia/#comments</comments> <pubDate>Tue, 04 Jan 2011 17:45:12 +0000</pubDate> <dc:creator>F. Javier Carazo Gil</dc:creator> <category><![CDATA[Tutoriales]]></category> <category><![CDATA[c]]></category> <category><![CDATA[clases]]></category> <category><![CDATA[curso]]></category> <category><![CDATA[herencia]]></category> <category><![CDATA[mono]]></category> <category><![CDATA[programación]]></category> <guid
isPermaLink="false">http://www.linuxhispano.net/?p=4843</guid> <description><![CDATA[Siguiendo con características propias de los lenguajes de alto nivel con orientación a objetos, llegamos a la herencia. ¿Qué es la herencia? En programación orientada a objetos, la herencia es el mecanismo básico para crear nuevas clases (hijas o derivadas), &#8230; <a
href="http://www.linuxhispano.net/2011/01/04/curso-c-con-mono-herencia/">Continuar leyendo <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Siguiendo con características propias de los lenguajes de alto nivel con <a
target="_blank" href="http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos" target="_blank">orientación a objetos</a>, llegamos a la <a
target="_blank" href="http://es.wikipedia.org/wiki/Herencia_(programaci%C3%B3n_orientada_a_objetos)" target="_blank">herencia</a>.</p><p><strong>¿Qué es la herencia?</strong></p><p>En programación orientada a objetos, la herencia es el mecanismo básico para crear nuevas clases (hijas o derivadas), basándonos en clases anteriores (a la que llamaremos padre, base o superclase). La relación es similar a la que se produce en muchas situaciones de la vida cotidiana, por ejemplo en el campo de la biología en las relaciones padre-hijo.</p><p>Gracias a este mecanismo, podemos basarnos en clases anteriores, para crear nuevas clases sobre trabajo ya hecho, de forma que extendemos la funcionalidad de la clase padre hacia un campo nuevo, sin tener que volver a reescribir todo el contenido de la misma.</p><p><strong>Ejemplos</strong></p><p>Hay multitud de casos de este tipo. Por ejemplo, la clase padre excepción, provee unos métodos y atributos generales para todas las excepciones posibles. De ella derivan excepciones concretas, por ejemplo de división entre cero, que además de los métodos y atributos ya existentes, añaden funcionalidad extra, pero reutilizando toda la funcionalidad de la clase padre.</p><p>Otro ejemplo clásico es el de los controles de una interfaz gráfica. La clase control es la padre de todo un abanico de clases hijo. La clase control tiene por ejemplo la situación (todos los controles tienen situación) pero cada clase hijo aporta nuevas funcionalidades (por ejemplo, sus propios eventos).</p><p><strong>Implementación</strong></p><p>Veremos la implementación en C# con un ejemplo concreto. Ya que están tan de moda los vehículos eléctricos, vamos a implementar una serie de clases, con herencia, que reflejen la siguiente realidad:</p><ul><li>Clase padre: motor, tendrá las características propias de toda clase de motores, gestionaremos potencia (entero en kW) y par (decimal en Nm)</li><li>Clase hijo: eléctrico, contendrá información exclusiva de los motores eléctricos, intensidad (entero en amperios), potencial (entero en voltios)</li><li>Clase hijo: de combustión interna, gestionará información de este tipo de motores. Cilindrada (entero en cc.), número de cilindros (entero) y emisiones de CO2 (decimal en gr/km)</li></ul><pre name="code" class="c-sharp">public class Motor{
	int potencia;
	decimal par;
	public int Potencia {
		get { return this.potencia; }
		set { potencia = value;	}
	}
	public decimal Par {
		get { return this.par; }
		set { par = value; }
	}
}
public class Electrico : Motor{
	int intensidad;
	int potencial;
	public int Intensidad {
		get { return this.intensidad; }
		set { intensidad = value; }
	}
	public int Potencial {
		get { return this.potencial; }
		set { potencial = value; }
	}
}
public class CombustionInterna : Motor{
	int cilindrada;
	int cilindros;
	public int Cilindrada {
		get { return this.cilindrada; }
		set { cilindrada = value; }
	}
	public int Cilindros {
		get { return this.cilindros; }
		set { cilindros = value; }
	}
}</pre><p>Como veis la implementación es como la de cualquier otra clase, pero añadiendo los dos puntos y el nombre de la clase padre al declarar a la clase hija. Luego podremos hacer llamadas del tipo:</p><pre name="code" class="c-sharp">Electrico a = new Electrico();
a.Potencia = 100;</pre><p><strong>Clases abstractas</strong></p><p>Si incluimos la palabra reservada <em>abstract </em>al declarar la clase padre: abstract class Motor; estamos indicándole a Mono que esa clase no podrá instanciarse. Es decir, podremos crear clases derivadas e instanciarlas, pero nunca crear objetos de la clase padre (en este caso, podríamos crear objetos de Electrico o CombustionInterna, pero no podríamos instanciar Motor).</p><p><strong>Métodos virtuales</strong></p><p>Si declaramos un método en la clase padre, en la clase hijo no podremos volver a declararlo a no ser que en la clase padre sea del tipo virtual. Para ello, en la declaración del método en el padre utilizaríamos la siguiente estructura:</p><pre name="code" class="c-sharp">public virtual void mostrarDatos()</pre><p>Y en el hijo, al declarar el método haríamos uso de la palabra clave <em>override</em>:</p><pre name="code" class="c-sharp">public override void mostrarDatos()</pre><p><strong>Entregas anteriores</strong></p><ul><li><a
href="http://www.linuxhispano.net/2010/12/23/curso-c-con-mono-%E2%80%93-tratamiento-de-excepciones/" target="_blank">Curso C# con Mono – Tratamiento de excepciones</a></li><li><a
href="http://www.linuxhispano.net/2010/12/11/curso-c-con-mono-conversion-de-tipos-e-informacion-cultural/" target="_blank">Curso C# con Mono – Conversión de tipos e información cultural</a></li><li><a
href="http://www.linuxhispano.net/2010/12/04/curso-c-con-mono-%E2%80%93-declaracion-de-clases-y-estructuras/" target="_blank">Curso C# con Mono – Declaración de clases y estructuras</a></li><li><a
href="http://www.linuxhispano.net/2010/11/19/curso-c-con-mono-%E2%80%93-espacio-de-nombres-y-regiones/" target="_blank">Curso C# con Mono – Espacio de nombres y regiones</a></li><li><a
href="http://www.linuxhispano.net/2010/11/15/curso-c-con-mono-%E2%80%93-ensamblados/" target="_blank">Curso C# con Mono – Ensamblados</a></li><li><a
title="Enlace a Curso C# con Mono – Variables y constantes" rel="bookmark" href="http://www.linuxhispano.net/2010/11/02/curso-c-con-mono-%e2%80%93-variables-y-constantes/">Curso C# con Mono – Variables y constantes</a></li><li><a
title="Enlace a Curso C# con Mono – Tipos de datos y uso de referencias" rel="bookmark" href="http://www.linuxhispano.net/2010/10/29/curso-c-con-mono-tipos-de-datos-y-uso-de-referencias/">Curso C# con Mono – Tipos de datos y uso de referencias</a></li><li><a
title="Enlace a Curso C# con Mono – ¡Hola Mundo!" rel="bookmark" href="http://www.linuxhispano.net/2010/10/21/curso-c-con-mono-%c2%a1hola-mundo/">Curso C# con Mono – ¡Hola Mundo!</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://www.linuxhispano.net/2011/01/04/curso-c-con-mono-herencia/feed/</wfw:commentRss> <slash:comments>8</slash:comments> </item> <item><title>Curso C# con Mono – Tratamiento de excepciones</title><link>http://www.linuxhispano.net/2010/12/23/curso-c-con-mono-%e2%80%93-tratamiento-de-excepciones/</link> <comments>http://www.linuxhispano.net/2010/12/23/curso-c-con-mono-%e2%80%93-tratamiento-de-excepciones/#comments</comments> <pubDate>Thu, 23 Dec 2010 16:46:15 +0000</pubDate> <dc:creator>F. Javier Carazo Gil</dc:creator> <category><![CDATA[Tutoriales]]></category> <category><![CDATA[.net]]></category> <category><![CDATA[c]]></category> <category><![CDATA[c sharp]]></category> <category><![CDATA[curso]]></category> <category><![CDATA[excepción]]></category> <category><![CDATA[mono]]></category> <category><![CDATA[mono develop]]></category> <guid
isPermaLink="false">http://www.linuxhispano.net/?p=4760</guid> <description><![CDATA[Una característica común a este tipo de lenguajes de alto nivel, es la presencia del manejo de excepciones. ¿Qué es una excepción? Una excepción es una situación anormal que se da a lo largo de la ejecución del programa. El &#8230; <a
href="http://www.linuxhispano.net/2010/12/23/curso-c-con-mono-%e2%80%93-tratamiento-de-excepciones/">Continuar leyendo <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Una característica común a este tipo de lenguajes de alto nivel, es la presencia del <a
target="_blank" href="http://es.wikipedia.org/wiki/Manejo_de_excepciones" target="_blank">manejo de excepciones</a>.</p><p><strong>¿Qué es una excepción? </strong></p><p>Una excepción es una situación anormal que se da a lo largo de la ejecución del programa. El manejador de la excepción, es una estructura de control que permite ejecutar un código de acuerdo a esa situación anormal de forma controlada.</p><p><strong>¿Qué tipo de acciones se suelen realizar? </strong></p><p>Por un lado tenemos acciones de tipo terminación. En lugar de aparecer un mensaje de error del sistema operativo, el programa mismo lo emite informando de qué va a terminar su ejecución.</p><p>Por otro lado, tenemos manejadores que modifican el comportamiento del programa en cierto momento. Para este tipo de acciones, podríamos decir que las excepciones representan más una forma de control del flujo que un recurso de emergencia.</p><p><strong>¿Qué otros mecanismos existen para esta misma problemática?</strong></p><p>Ejemplos típicos de excepciones son:</p><ul><li>Cuando tratamos de dividir entre cero</li><li>Cuando tratamos de llamar a un método de una instancia que es nula</li><li>Cuando tratamos de convertir una cadena en número y la cadena no tiene formato numérico</li></ul><p>Y así podríamos seguir un largo etcétera de posibles excepciones. Como comprobaréis todas estas excepciones, podrían comprobarse como se hace en lenguajes que no tienen este mecanismo: <strong>mediante condicionales cada vez que hay una operación que pueda sufrir error</strong>. ¿Por qué es mejor usar excepciones?</p><p><strong>Ventajas de las excepciones</strong></p><p>¿Para qué complicarnos la vida con un nuevo concepto si podemos usar directamente comprobaciones?</p><ol><li>Separar el código principal del programa, del tratamiento de errores</li><li>Propagar el error en la pila de ejecución, de forma</li><li>Agrupar y clasificar los errores</li></ol><p><strong>¿Cómo detectar y tratar una excepción con Mono y C#?</strong></p><p>Para detectar una excepción en C# usamos la siguiente estructura (veámoslo con un ejemplo):</p><pre name="code" class="c-sharp">int a = 1;
int b = 0;
try{
	int c = a / b; // zona protegida
}catch(DivideByZeroException exc){
	Console.Write("Ha intentado dividir desde cero"); // código a ejecutar
}</pre><p>Como véis, estamos hablando directamente de la excepción de división entre cero. Si queremos controlar cualquier tipo de excepción, sólo tendremos que usar en lugar de <em>DivideByZeroException</em>,<em> </em>la clase de excepciones de la que heredan todas las demás, <em>Exception</em>. También podremos combinarlas, de forma que podamos atender a cierto tipo de excepciones y a cualquier otra que no hayamos controlado.</p><p>Veamos un caso de control para un tipo de excepción concreta (la de formato incorrecto) y el control para cualquier otro caso:</p><pre name="code" class="c-sharp">string cadena = "2a";
try{
	int valor = int.Parse(cadena);
}catch(FormatException exc){
	Console.Write("Ha ocurrido una excepción por el formato del fichero. Detalles:\n" + exc.Message);
}catch(Exception exc){
	Console.Write("Ha ocurrido otro tipo de error. Detalles:\n" + exc.Message);
}</pre><p><strong>Entregas anteriores</strong></p><ul><li><a
href="http://www.linuxhispano.net/2010/12/11/curso-c-con-mono-conversion-de-tipos-e-informacion-cultural/" target="_blank">Curso C# con Mono – Conversión de tipos e información cultural</a></li><li><a
href="http://www.linuxhispano.net/2010/12/04/curso-c-con-mono-%E2%80%93-declaracion-de-clases-y-estructuras/" target="_blank">Curso C# con Mono – Declaración de clases y estructuras</a></li><li><a
href="http://www.linuxhispano.net/2010/11/19/curso-c-con-mono-%E2%80%93-espacio-de-nombres-y-regiones/" target="_blank">Curso C# con Mono – Espacio de nombres y regiones</a></li><li><a
href="http://www.linuxhispano.net/2010/11/15/curso-c-con-mono-%E2%80%93-ensamblados/" target="_blank">Curso C# con Mono – Ensamblados</a></li><li><a
title="Enlace a Curso C# con Mono – Variables y constantes" rel="bookmark" href="http://www.linuxhispano.net/2010/11/02/curso-c-con-mono-%e2%80%93-variables-y-constantes/">Curso C# con Mono – Variables y constantes</a></li><li><a
title="Enlace a Curso C# con Mono – Tipos de datos y uso de referencias" rel="bookmark" href="http://www.linuxhispano.net/2010/10/29/curso-c-con-mono-tipos-de-datos-y-uso-de-referencias/">Curso C# con Mono – Tipos de datos y uso de referencias</a></li><li><a
title="Enlace a Curso C# con Mono – ¡Hola Mundo!" rel="bookmark" href="http://www.linuxhispano.net/2010/10/21/curso-c-con-mono-%c2%a1hola-mundo/">Curso C# con Mono – ¡Hola Mundo!</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://www.linuxhispano.net/2010/12/23/curso-c-con-mono-%e2%80%93-tratamiento-de-excepciones/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Curso C# con Mono &#8211; Conversión de tipos e información cultural</title><link>http://www.linuxhispano.net/2010/12/11/curso-c-con-mono-conversion-de-tipos-e-informacion-cultural/</link> <comments>http://www.linuxhispano.net/2010/12/11/curso-c-con-mono-conversion-de-tipos-e-informacion-cultural/#comments</comments> <pubDate>Sat, 11 Dec 2010 13:04:56 +0000</pubDate> <dc:creator>F. Javier Carazo Gil</dc:creator> <category><![CDATA[Tutoriales]]></category> <category><![CDATA[.net]]></category> <category><![CDATA[c]]></category> <category><![CDATA[c sharp]]></category> <category><![CDATA[conversión]]></category> <category><![CDATA[cultural]]></category> <category><![CDATA[icaza]]></category> <category><![CDATA[mono]]></category> <category><![CDATA[parse]]></category> <category><![CDATA[tipos]]></category> <category><![CDATA[tostring]]></category> <guid
isPermaLink="false">http://www.linuxhispano.net/?p=4538</guid> <description><![CDATA[Cuando estamos trabajando con diferentes tipos de datos, siempre conviene conocer los mecanismos para convertir un tipo de datos en otros. Si a eso le sumamos, que podamos hacer aplicaciones en las que se trabaje introduciendo datos siguiente el formalismo &#8230; <a
href="http://www.linuxhispano.net/2010/12/11/curso-c-con-mono-conversion-de-tipos-e-informacion-cultural/">Continuar leyendo <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Cuando estamos trabajando con diferentes tipos de datos, siempre conviene conocer los mecanismos para convertir un tipo de datos en otros. Si a eso le sumamos, que podamos hacer aplicaciones en las que se trabaje introduciendo datos siguiente el formalismo español (comas para separar decimales, puntos para separar miles) o viceversa (podéis ver un mapa de dónde se usa cada <a
target="_blank" href="http://es.wikipedia.org/wiki/Separador_decimal" target="_blank">separador decimal aquí</a>).</p><p>Esto es lo que se llama la <a
target="_blank" href="http://www.go-mono.com/docs/monodoc.ashx?link=T%3aSystem.Globalization.CultureInfo%2f*" target="_blank">información cultural, </a>que se sitúa dentro del ensamblado: <em>System.Globalization</em>, y que aparte de en este tema es conveniente conocer para otras tareas.</p><p><strong>Casting</strong></p><p>Es la forma más simple de hacer una conversión de datos. Está directamente heredada de C y puede ser implícita (si no se especifica) o explícita (cuando sí lo hacemos). Tiene grandes limitaciones porque básicamente sólo permite no convertir, sino camuflar, para una instrucción en concreto el tipo de dato.</p><p>Veamos un ejemplo:</p><pre name="code" class="c-sharp">int i = 10;
float f = 0;
f = i;  // conversión implícita
f = 0.5F;
i = (int)f;  // conversión explícita. Existe pérdida de información, los decimales</pre><p><strong>Métodos ToString</strong></p><p>Al igual que en otros muchos lenguajes de programación, a este nivel de abstracción, existe un método <strong>ToString</strong>, definido en cada clase, que convierte cualquier objeto en una cadena. Si tenemos un entero que tiene dentro el valor 1, devolverá una cadena &#8220;1&#8243;; igualmente pasará  con un decimal, pero aquí es donde entra la información cultural en juego. Si tenemos la cultura predefinida como la española, mostrará comas y punto de acuerdo a nuestra forma de hacerlo, si definimos otra cultura predefinida, el comportamiento cambiará conforme a eso. También podemos cambiar de forma puntual la cultura predefinida para un punto en concreto.</p><p>Veamos ejemplos de uso avanzado de ToString usando especificadores, para mostrar el mismo número por pantalla con decimales, sin ellos, en formato moneda, con porcentaje&#8230;</p><pre name="code" class="c-sharp">decimal valor = 16325.62m;
string especificador;
// Sin especificador
Console.WriteLine("Sin el especificador tenemos el valor: " + valor.ToString());
// Especificador numérico estándar
especificador = "G";
Console.WriteLine("Con el especificador: " + especificador + " tenemos el valor: " + valor.ToString(especificador));
// Muestra: 16325,62
especificador = "C";
Console.WriteLine("Con el especificador: " + especificador + " tenemos el valor: " + valor.ToString(especificador));
// Muestra: 16.325,62€
especificador = "E04";
Console.WriteLine("Con el especificador: " + especificador + " tenemos el valor: " + valor.ToString(especificador));
// Muestra: 1,6326E+004
especificador = "F";
Console.WriteLine("Con el especificador: " + especificador + " tenemos el valor: " + valor.ToString(especificador));
// Muestra: 16325,62
especificador = "N";
Console.WriteLine("Con el especificador: " + especificador + " tenemos el valor: " + valor.ToString(especificador));
// Muestra: 16.325,62
especificador = "P";
Console.WriteLine("Con el especificador: " + especificador + " tenemos el valor: " + valor.ToString(especificador));
// Muestra: 1.632.562,00%</pre><p>Veamos un ejemplo de uso con <strong>información cultural</strong> (<em>CultureInfo</em>):</p><pre name="code" class="c-sharp">System.Globalization.CultureInfo culture  = new System.Globalization.CultureInfo("EN-us");
Console.WriteLine("Cambiando a cultura de inglés de Estados Unidos tenemos: " + valor.ToString(culture.NumberFormat));
// Muestra: 16325.62</pre><p>Existen objetos, que a pesar de tener un método de este tipo, la cadena que devuelven no contiene prácticamente nada de la información del objeto. Por ejemplo, si tenemos un DataTable y le invocamos el método ToString, probablemente la salida sea sólo que es una instancia del tipo de objeto DataTable.</p><p><strong>Métodos Parse</strong></p><p>Podríamos decir que las funciones <strong>Parse</strong>, son la funciones inversas a los métodos <strong>ToString</strong>. A diferencia de los primeros, de una cadena, son capaces de leer su contenido y plasmarlo en un tipo de dato concreto, por ejemplo, de cadena a entero.</p><p>En C existían unas cuantas funciones que hacían esa misma labor: <a
target="_blank" href="http://es.answers.yahoo.com/question/index?qid=20080505160846AA6vT1W" target="_blank">atoi, atol&#8230;</a>. Además de ser <strong>verdaderamente útiles en interfaces gráficos y web</strong>,<strong> </strong>recordad que los datos que introducen los usuarios suelen venir en formato cadena, por la propia constitución de este tipo de interfaces.</p><p>Además son verdaderamente útiles cuando tratamos con tipos de datos a los que no podemos hacer <em>casting</em> directamente, ya que la solución más práctica es hacer un <strong>ToString</strong> seguido de un <strong>Parse</strong>.</p><p>Veamos ejemplos:</p><pre name="code" class="c-sharp">string valor = "1";
int a = int.Parse(a);
Console.WriteLine("El valor de a es: " a.ToString());</pre><p>Como podréis imaginar, si queremos pasar datos decimales con comas y puntos de tal manera o de tal otra, también deberemos usar en este punto la información cultural.</p><p>Nos vemos en la próxima entrega.</p><p><strong>Entregas anteriores</strong></p><ul><li><a
href="http://www.linuxhispano.net/2010/12/04/curso-c-con-mono-%E2%80%93-declaracion-de-clases-y-estructuras/" target="_blank">Curso C# con Mono &#8211; Declaración de clases y estructuras</a></li><li><a
href="http://www.linuxhispano.net/2010/11/19/curso-c-con-mono-%E2%80%93-espacio-de-nombres-y-regiones/" target="_blank">Curso C# con Mono – Espacio de nombres y regiones</a></li><li><a
href="http://www.linuxhispano.net/2010/11/15/curso-c-con-mono-%E2%80%93-ensamblados/" target="_blank">Curso C# con Mono – Ensamblados</a></li><li><a
title="Enlace a Curso C# con Mono – Variables y constantes" rel="bookmark" href="http://www.linuxhispano.net/2010/11/02/curso-c-con-mono-%e2%80%93-variables-y-constantes/">Curso C# con Mono – Variables y constantes</a></li><li><a
title="Enlace a Curso C# con Mono – Tipos de datos y uso de referencias" rel="bookmark" href="http://www.linuxhispano.net/2010/10/29/curso-c-con-mono-tipos-de-datos-y-uso-de-referencias/">Curso C# con Mono – Tipos de datos y uso de referencias</a></li><li><a
title="Enlace a Curso C# con Mono – ¡Hola Mundo!" rel="bookmark" href="http://www.linuxhispano.net/2010/10/21/curso-c-con-mono-%c2%a1hola-mundo/">Curso C# con Mono – ¡Hola Mundo!</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://www.linuxhispano.net/2010/12/11/curso-c-con-mono-conversion-de-tipos-e-informacion-cultural/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>Curso C# con Mono – Declaración de clases y estructuras</title><link>http://www.linuxhispano.net/2010/12/04/curso-c-con-mono-%e2%80%93-declaracion-de-clases-y-estructuras/</link> <comments>http://www.linuxhispano.net/2010/12/04/curso-c-con-mono-%e2%80%93-declaracion-de-clases-y-estructuras/#comments</comments> <pubDate>Sat, 04 Dec 2010 15:47:40 +0000</pubDate> <dc:creator>F. Javier Carazo Gil</dc:creator> <category><![CDATA[Tutoriales]]></category> <category><![CDATA[c]]></category> <category><![CDATA[clases]]></category> <category><![CDATA[curso]]></category> <category><![CDATA[estructuras]]></category> <category><![CDATA[mono]]></category> <guid
isPermaLink="false">http://www.linuxhispano.net/?p=3973</guid> <description><![CDATA[Llegados a este punto, podríamos hablar tan profundamente y durante tanto tiempo sobre clases, objetos, métodos, atributos&#8230; que desvirtuaría el sentido de este curso. Supongo que tenéis nociones básicas de todo este paradigma de la orientación a objetos y veremos &#8230; <a
href="http://www.linuxhispano.net/2010/12/04/curso-c-con-mono-%e2%80%93-declaracion-de-clases-y-estructuras/">Continuar leyendo <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Llegados a este punto, podríamos hablar tan profundamente y durante tanto tiempo sobre clases, objetos, métodos, atributos&#8230; que desvirtuaría el sentido de este curso. Supongo que tenéis nociones básicas de todo este <a
target="_blank" href="http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos" target="_blank">paradigma de la orientación a objetos</a> y veremos cómo implementar clases en C# con Mono.</p><p>Podríamos decir a muy <em>grosso </em>modo que:</p><ul><li>Las <a
target="_blank" href="http://es.wikipedia.org/wiki/Clase_(inform%C3%A1tica)" target="_blank">clases</a> son la unidad básica de estructuramiento en un programa de C#</li><li>Las <a
target="_blank" href="http://es.wikipedia.org/wiki/Estructura_de_datos" target="_blank">estructuras </a>son una herencia de lenguajes más antiguos, como C, donde creamos un grupo común para varias variables, sin atribuirles posibilidades de ejecución (métodos)</li></ul><p>En C#, las estructuras pueden tener métodos básicos para la lectura o modificación de las variables.</p><p><strong>¿Cómo crear una clase?</strong></p><p>Digo cómo crear y no cómo declarar una clase, porque el curso está basado en <a
target="_blank" href="http://es.wikipedia.org/wiki/MonoDevelop" target="_blank">MonoDevelop </a>y tras crear una clase con el interfaz, veremos cómo se declara en el código.</p><p
style="text-align: center;"><a
href="http://www.linuxhispano.net/wp-content/uploads/2010/12/nuevaClase.png"><img
class="aligncenter size-full wp-image-4530" title="nuevaClase" src="http://www.linuxhispano.net/wp-content/uploads/2010/12/nuevaClase.png" alt="Declaración de nueva clase con MonoDevelop" width="550" height="390" /></a></p><p>Dentro del espacio de nombres, a la izquierda de la interfaz, hacemos: clic derecho, &#8220;Añadir&#8221;, &#8220;Nuevo archivo&#8221;, &#8220;Clase vacía&#8221; e indicamos el nombre. Se nos creará un esqueleto básico de clase como el que sigue:</p><pre class="c-sharp" name="code">using System;
namespace holaMundo
{
	public class persona
	{
		public persona ()
		{
		}
	}
}</pre><p>Veamos ahora la clase un poco más rellena. Como veréis, estoy dentro del mismo espacio de nombres en el que hemos hecho los ejemplos anteriores, &#8220;holaMundo&#8221;. Incluimos: atributos, métodos para manejar los atributos, el constructor y un método de ejemplo.</p><pre class="c-sharp" name="code">using System;
namespace holaMundo
{
	public class persona
	{
		// atributos
		string nombre;
		int edad;
		// propiedades: métodos para manejar los atributos
		public string Nombre {
			get { return nombre; }
			set { nombre = value; }
		}
		public int Edad {
			get { return edad; }
			set { edad = value; }
		}
		// constructor
		public persona (string _nombre, int _edad)
		{
			// usamos los métodos para manejar atributos en lugar de this.nombre
			Nombre = _nombre;
			Edad = _edad;
		}
		// método para imprimir datos de la instancia
		public void print()
		{
			System.Console.WriteLine("Nombre: " + nombre + " - Edad: " + edad.ToString());
		}
	}
}</pre><p>Aunque la sintaxis os resultará bastante familiar si habéis trabajado con lenguajes como Java o C++, hay alguna curiosidad que querría comentar:</p><p>Los <em>getter</em> y <em>setter</em>, también llamadas propiedades, son unos métodos que se encargan de interactuar con los atributos, sin necesidad de usar los típicos y molestos: <em>getVariable() </em>y <em>setVariable(valor)</em>. Se integran muy bien en el código y al hacer llamadas del estilo <em>Edad = algo </em>o <em>algo = Edad</em>, se llamarán de forma automática.</p><p>MonoDevelop crea las cases automáticamente como <em>public</em>, de esta forma puede tenerse acceso desde fuera de su ensamblado.</p><p>Los atributos de las clases también pueden tener diferentes niveles de acceso. Por defecto, si no se indica es <em>private</em>. Veamos las diferencias entre ellos:</p><ul><li><em>public</em>: Accesible desde otras clases. No recomendable, mejor <em>private</em> y con propiedad para tener acceso desde fuera.</li><li><em>protected</em>: Hace que el atributo sea accesible directamente desde otras clases derivadas de aquella en la que está declarado, pero no desde el resto.</li><li><em>private</em>: Opción por defecto. La variable sólo será accesible desde su propia clase.</li><li><em>internal</em>: Sólo accesible desde el propio ensamblado.</li></ul><p>Como he dicho, hay muchas más opciones y mucho más que comentar en este apartado, pero si conocéis orientación a objetos, con esto tendréis suficiente.</p><p>De todas formas, vía comentarios, responderé posibles dudas que puedan surgir <img
src='http://www.linuxhispano.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p><p><strong>Estructuras</strong></p><p>Antes de terminar, haremos una breve introducción a este tipo de mecanismo, que usamos para agrupar distintas variables en torno a una unión común, sin aportar ningún tipo de método para su manejo (esto las distingue directamente de las clases), pero a diferencia de lenguajes más antiguos, <strong>permitiendo que tengan variables privadas y propiedades para su manejo</strong>.</p><p><a
href="http://www.linuxhispano.net/wp-content/uploads/2010/12/c_sharp.jpg"><img
class="aligncenter size-full wp-image-4531" title="c_sharp" src="http://www.linuxhispano.net/wp-content/uploads/2010/12/c_sharp.jpg" alt="" width="400" height="400" /></a></p><p>Veamos cómo se declaran y cómo se hacen llamadas a sus miembros:</p><pre class="c-sharp" name="code">public struct direccion{
	string calle;
	int numero;
	char letra;
	public string Calle{
		get { return calle; }
		set { calle = value; }
	}
	public int Numero{
		get { return numero; }
		set { numero = value; }
	}
	public char Letra{
		get { return letra; }
		set { letra = value; }
	}
}</pre><p>Las llamadas las haremos a las propiedad, que podemos cambiarlas si nos interesan en el código anterior con funciones más complejas, llamadas a BB.DD., etc.; en definitiva, con lo que necesitemos.</p><pre class="c-sharp" name="code">direccion personal;
personal.Calle = "Avenida sin nombre";
personal.Numero = 6;
personal.Letra = 'C'</pre><p><strong>Entregas anteriores</strong></p><ul><li><a
href="http://www.linuxhispano.net/2010/11/19/curso-c-con-mono-%E2%80%93-espacio-de-nombres-y-regiones/" target="_blank">Curso C# con Mono – Espacio de nombres y regiones</a></li><li><a
href="http://www.linuxhispano.net/2010/11/15/curso-c-con-mono-%E2%80%93-ensamblados/" target="_blank">Curso C# con Mono – Ensamblados</a></li><li><a
title="Enlace a Curso C# con Mono – Variables y constantes" rel="bookmark" href="http://www.linuxhispano.net/2010/11/02/curso-c-con-mono-%e2%80%93-variables-y-constantes/">Curso C# con Mono – Variables y constantes</a></li><li><a
title="Enlace a Curso C# con Mono – Tipos de datos y uso de referencias" rel="bookmark" href="http://www.linuxhispano.net/2010/10/29/curso-c-con-mono-tipos-de-datos-y-uso-de-referencias/">Curso C# con Mono – Tipos de datos y uso de referencias</a></li><li><a
title="Enlace a Curso C# con Mono – ¡Hola Mundo!" rel="bookmark" href="http://www.linuxhispano.net/2010/10/21/curso-c-con-mono-%c2%a1hola-mundo/">Curso C# con Mono – ¡Hola Mundo!</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://www.linuxhispano.net/2010/12/04/curso-c-con-mono-%e2%80%93-declaracion-de-clases-y-estructuras/feed/</wfw:commentRss> <slash:comments>8</slash:comments> </item> <item><title>Curso C# con Mono – Espacio de nombres y regiones</title><link>http://www.linuxhispano.net/2010/11/19/curso-c-con-mono-%e2%80%93-espacio-de-nombres-y-regiones/</link> <comments>http://www.linuxhispano.net/2010/11/19/curso-c-con-mono-%e2%80%93-espacio-de-nombres-y-regiones/#comments</comments> <pubDate>Fri, 19 Nov 2010 14:08:15 +0000</pubDate> <dc:creator>F. Javier Carazo Gil</dc:creator> <category><![CDATA[Tutoriales]]></category> <category><![CDATA[c]]></category> <category><![CDATA[curso]]></category> <category><![CDATA[espacio de nombres]]></category> <category><![CDATA[mono]]></category> <guid
isPermaLink="false">http://www.linuxhispano.net/?p=4194</guid> <description><![CDATA[El otro día hablábamos de cómo se organizaba el código ejecutable dentro de los ensamblados, a los que podíamos referir dentro de nuestro proyecto de forma inmediata con Mono Develop. Imaginemos que acabamos de hacer referencia al conector de MySQL &#8230; <a
href="http://www.linuxhispano.net/2010/11/19/curso-c-con-mono-%e2%80%93-espacio-de-nombres-y-regiones/">Continuar leyendo <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p><a
href="http://www.linuxhispano.net/2010/11/15/curso-c-con-mono-%E2%80%93-ensamblados/" target="_blank">El otro día hablábamos</a> de cómo se organizaba el código ejecutable dentro de los ensamblados, a los que podíamos referir dentro de nuestro proyecto de forma inmediata con Mono Develop. Imaginemos que acabamos de hacer referencia <a
href="http://www.linuxhispano.net/2010/02/05/howto-instalar-el-conector-de-mysql-sobre-mono-con-ado-net/" target="_blank">al conector de MySQL para Mono/.NET</a> y queremos usar su funcionalidad en nuestro código. ¿Cómo se organizan los ensamblados, las clases y las funciones en el código? La herramienta básica para esta labor son los <strong>espacios de nombres</strong>.</p><p><strong>Espacios de nombres</strong></p><p>Los espacios de nombres o <em>namespaces</em>, son la forma de organizar dentro del código, las clases y funciones de cara a una funcionalidad. Están directamente relacionados con los ensamblados, ya que los ensamblados definen en sí mismos, un espacio de nombres y a su vez pueden contener una serie de ellos.</p><p>Cada vez que creamos un proyecto con Mono Develop, se nos crea de forma automática un espacio de nombres para el proyecto, del que colgarán secciones de forma jerárquica cuando el proyecto vaya creciendo.</p><p><a
href="http://www.linuxhispano.net/wp-content/uploads/2010/11/espacio.png"><img
class="aligncenter size-full wp-image-4221" title="espacio" src="http://www.linuxhispano.net/wp-content/uploads/2010/11/espacio.png" alt="" width="539" height="303" /></a>Para ver qué funciones, clases o qué otros espacios de nombres, podemos directamente hacer lo siguiente. Escribimos el nombre de espacio de nombres (por ejemplo System) y justo tras él, un punto, automáticamente el IDE nos mostrará una lista de posibilidades.</p><p>A continuación podéis ver el desplegable. Perdonad por las transparencias pero los efectos gráficos de Compiz al hacer tomas de pantalla con desplegables, juegan estas malas pasadas.</p><p><a
href="http://www.linuxhispano.net/wp-content/uploads/2010/11/espacios_nombre.png"><img
class="aligncenter size-full wp-image-4222" title="espacios_nombre" src="http://www.linuxhispano.net/wp-content/uploads/2010/11/espacios_nombre.png" alt="" width="419" height="244" /></a><strong>Regiones</strong></p><p>Otra forma de organizar el código, aunque no de manera formal, sino de cara al desarrollador es mediante regiones. Hace unos meses ya escribí una entrada sobre eso, así que <a
href="http://www.linuxhispano.net/2010/04/27/reorganiza-tu-codigo-en-regiones-con-c-y-monodevelop/" target="_blank">os dejo la referencia directamente</a>.</p><p><strong>Entregas anteriores</strong></p><ul><li><a
href="http://www.linuxhispano.net/2010/11/15/curso-c-con-mono-%E2%80%93-ensamblados/" target="_blank">Curso C# con Mono &#8211; Ensamblados</a></li><li><a
title="Enlace a Curso C# con Mono – Variables y constantes" rel="bookmark" href="http://www.linuxhispano.net/2010/11/02/curso-c-con-mono-%e2%80%93-variables-y-constantes/">Curso C# con Mono – Variables y constantes</a></li><li><a
title="Enlace a Curso C# con Mono – Tipos de datos y uso de referencias" rel="bookmark" href="http://www.linuxhispano.net/2010/10/29/curso-c-con-mono-tipos-de-datos-y-uso-de-referencias/">Curso C# con Mono – Tipos de datos y uso de referencias</a></li><li><a
title="Enlace a Curso C# con Mono – ¡Hola Mundo!" rel="bookmark" href="http://www.linuxhispano.net/2010/10/21/curso-c-con-mono-%c2%a1hola-mundo/">Curso C# con Mono – ¡Hola Mundo!</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://www.linuxhispano.net/2010/11/19/curso-c-con-mono-%e2%80%93-espacio-de-nombres-y-regiones/feed/</wfw:commentRss> <slash:comments>7</slash:comments> </item> </channel> </rss>
