<?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>Programación y desarrollo web &#187; Tutoriales C#</title>
	<atom:link href="http://www.puntopeek.com/category/tutoriales-c/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.puntopeek.com</link>
	<description>Programación en C#, PHP y software libre</description>
	<lastBuildDate>Thu, 26 Jan 2012 04:30:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>LINQ con C#. Ejemplos</title>
		<link>http://www.puntopeek.com/programacion/linq-c-sharp-ejemplos-caracteristicas/</link>
		<comments>http://www.puntopeek.com/programacion/linq-c-sharp-ejemplos-caracteristicas/#comments</comments>
		<pubDate>Thu, 08 Sep 2011 02:53:23 +0000</pubDate>
		<dc:creator>Tomy</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Tutoriales C#]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://www.puntopeek.com/?p=491</guid>
		<description><![CDATA[En el último post les estaba hablando sobre una de las nuevas características de C#, los métodos extensores. En esta ocasión veremos algunas características y ejemplos sobre otra nueva característica de C# para trabajar con fuentes de datos: LINQ.


Entradas relacionadas<li><a href='http://www.puntopeek.com/tutoriales-c/herencia-programacion-en-c/' rel='bookmark' title='Permanent Link: Herencia en C#. Concepto y ejemplos'>Herencia en C#. Concepto y ejemplos</a></li>
<li><a href='http://www.puntopeek.com/programacion/genericidad-ejemplos-c-sharp/' rel='bookmark' title='Permanent Link: Genericidad en C#. Ejemplos'>Genericidad en C#. Ejemplos</a></li>
]]></description>
			<content:encoded><![CDATA[<p>Casi todas las aplicaciones medianamente serias, necesitarán en algún momento acceder y consultar una base de datos, para luego convertir estos datos en objetos y trabajar con ellos.</p>
<p>Pues bien, si ya llevas algún tiempo programando, habrás notado que esto de extraer los datos de la fuente de datos y tratarlos como objetos es algo complicado, sobre todo porque existen buenas diferencias entre las bases de datos relacionales y los lenguajes orientados a objetos como <em>C#.</em></p>
<p>Se han diseñado unas cuantas herramientas <em>ORM</em> (Object-Relational mapping) para resolver este problema (crear una base de datos orientada a objetos virtual), pero casi siempre dejan algo que desear, y hoy por hoy, a pesar de haber unas cuantas herramientas de uso libre y comercial, muchos programadores prefieren usar sus propias bibliotecas para trabajar con fuentes de datos.</p>
<p>En este contexto es que nace la idea de <em>LINQ</em> (Language INtegrated Query), en principio una herramienta más para dar solución al problema del mapeo objeto-relacional (ORM) y simplificar la interacción entre objetos y fuentes de datos (XML, ADO.Net, RDBMS), quién luego se convirtió en un conjunto de herramientas de consulta integrado en varios lenguajes de la plataforma .Net.</p>
<p><em>LINQ</em> es un cambio en la forma de manejar y manipular los datos, permite el acceso a cualquier fuente de datos (<em>LINQ to Objects</em>, <em>LINQ to SQL</em>,<em> LINQ to DataSets</em>), mezclar datos de diferentes fuentes con una sintaxis muy sencilla, comprobar en tiempo de compilación las consultas, el uso de IntelliSense de Visual Studio y un enfoque declarativo para escribir códigos más cortos y sencillos. Funciona a partir de <em>C# 3.0</em> y <em>VB.Net 9.0</em> ya que requiere de ayuda por parte del compilador.</p>
<p>En realidad <em>LINQ</em> lo que provee es una capa intermedia entre la fuente de dato y el cliente, por decirlo de alguna forma. Gracias a esta abstracción es que podemos trabajar de la misma forma con <em>LINQ </em>sin importar que la fuente de datos sea un archivo <em>XML</em> o una base de datos.</p>
<p>Bueno,  vamos a ver algunos códigos y ejemplos de consultas <em>LINQ </em>y su ventaja frente a las consultas imperativas que se hacen con <em>C#</em> y a otras.</p>
<p><small>Nota: Para este ejemplo, vamos a suponer que tenemos ya una base de datos llamada <em>Personal </em>mapeada a un conjunto de clases como sigue. Noten que en muchos casos esto se puede hacer de forma automática con <em>Visual Studio</em>. </small></p>
<p>Esta sería la estructura de la clase que hace referencia a la base de datos:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #000000;">&#91;</span>Table<span style="color: #000000;">&#40;</span>Name<span style="color: #008000;">=</span><span style="color: #666666;">&quot;Personas&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
<span style="color: #FF0000;">class</span> Persona
<span style="color: #000000;">&#123;</span>
     <span style="color: #000000;">&#91;</span>Column<span style="color: #000000;">&#40;</span>IsPrimaryKey<span style="color: #008000;">=</span><span style="color: #0600FF;">true</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
      <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> ID<span style="color: #008000;">;</span>
&nbsp;
     <span style="color: #000000;">&#91;</span>Column<span style="color: #000000;">&#40;</span>Name<span style="color: #008000;">=</span><span style="color: #666666;">&quot;ContactName&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
      <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> Nombre<span style="color: #008000;">;</span>
&nbsp;
     <span style="color: #000000;">&#91;</span>Column<span style="color: #000000;">&#40;</span>Name<span style="color: #008000;">=</span><span style="color: #666666;">&quot;ContactAge&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
      <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> Edad<span style="color: #008000;">;</span>
&nbsp;
     <span style="color: #000000;">&#91;</span>Column<span style="color: #000000;">&#93;</span>
      <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> Ocupación<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Ahora vamos a obtener todas las personas que tengan menos de 30 años y que sean abogados usando LINQ:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">var consulta <span style="color: #008000;">=</span>
            from persona <span style="color: #0600FF;">in</span> db.<span style="color: #0000FF;">GetTable</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
            where persona.<span style="color: #0000FF;">Edad</span><span style="color: #008000;">&lt;</span><span style="color: #FF0000;">30</span> <span style="color: #008000;">&amp;&amp;</span> persona.<span style="color: #0000FF;">Ocupacion</span><span style="color: #008000;">==</span>”abogado”
            select persona<span style="color: #008000;">;</span></pre></div></div>

<p>Y así ya dejamos de tener que hacer las consultas SQL aquellas que nos complicaban la vida, ahora todo es mucho más sencillo, y podemos mantener las mismas consultas sin importar que fuente de dato se esté usando. En el MSDN hay <a href="http://msdn.microsoft.com/en-us/vcsharp/aa336746">unos cuantos buenos ejemplos de LINQ</a>. Terminaré con una frase que describe en dos líneas la idea esencial de LINQ:</p>
<blockquote><p>“Before LINQ it was like you had to order your dinner in one language and drinks in another”<br />
Jason McConnel, Product Manager for Visual Studio at Microsoft</p></blockquote>
<h2>Para seguir leyendo sobre LINQ:</h2>
<p><a href="http://download.damieng.com/dotnet/LINQToSQLCheatSheet.pdf" target="_blank">Hoja de Trucos de LINQ to SQL</a><br />
<a href="http://www.devtroce.com/2009/12/19/un-ejemplo-practico-de-linq-y-c/">Ejemplo práctico con LINQ y C#</a><br />
<a href="http://speakingin.net/tutorial-de-linq-to-sql/">Tutorial de LINQ to SQL </a>*</p>


<p>Entradas relacionadas<li><a href='http://www.puntopeek.com/tutoriales-c/herencia-programacion-en-c/' rel='bookmark' title='Permanent Link: Herencia en C#. Concepto y ejemplos'>Herencia en C#. Concepto y ejemplos</a></li>
<li><a href='http://www.puntopeek.com/programacion/genericidad-ejemplos-c-sharp/' rel='bookmark' title='Permanent Link: Genericidad en C#. Ejemplos'>Genericidad en C#. Ejemplos</a></li>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.puntopeek.com/programacion/linq-c-sharp-ejemplos-caracteristicas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Métodos extensores en C#</title>
		<link>http://www.puntopeek.com/codigos-c/metodos-extensores-en-c-sharp-net/</link>
		<comments>http://www.puntopeek.com/codigos-c/metodos-extensores-en-c-sharp-net/#comments</comments>
		<pubDate>Sat, 09 Jul 2011 09:07:29 +0000</pubDate>
		<dc:creator>Tomy</dc:creator>
				<category><![CDATA[Codigos C#]]></category>
		<category><![CDATA[Tutoriales C#]]></category>
		<category><![CDATA[algoritmos]]></category>
		<category><![CDATA[ejemplos C#]]></category>
		<category><![CDATA[metodos extensores]]></category>

		<guid isPermaLink="false">http://www.puntopeek.com/?p=480</guid>
		<description><![CDATA[Los métodos extensores son un recurso de C# a partir de la versión 3.0 y permite añadir métodos a tipos ya definidos sin tener que crear un tipo heredero, recompilar o modificar al tipo original de una forma muy sencilla &#8230; <a href="http://www.puntopeek.com/codigos-c/metodos-extensores-en-c-sharp-net/">seguir leyendo &#187;</a></p>


No hay entradas relacionadas.]]></description>
			<content:encoded><![CDATA[<p>Los métodos extensores son un recurso de C# a partir de la versión 3.0 y permite <strong>añadir métodos a tipos ya definidos</strong> sin tener que crear un tipo heredero, recompilar o modificar al tipo original de una forma muy sencilla y con una sintaxis casi idéntica a la forma tradicional de declarar un método. En otras palabras, si queremos añadirle una funcionalidad a una clase o tipo ya definido anteriormente, no tendremos que modificarla, al no ser que vayamos a usar variables privadas de la clase o cosas por el estilo.</p>
<p>Se definen como <strong>métodos estáticos pertenecientes a una clase estática y no genérica</strong>; pero se llaman de la forma tradicional, como métodos de una instancia de una clase.</p>
<p>Se les pasa como primer parámetro this seguido del tipo de la clase a la cual se va a añadir el método; aquí tenemos un ejemplo de añadirle un método a la clase String de .Net:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #FF0000;">class</span> MyExtensions
<span style="color: #000000;">&#123;</span>
     <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #FF0000;">int</span> WordCount<span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span> <span style="color: #FF0000;">String</span> str<span style="color: #000000;">&#41;</span>
     <span style="color: #000000;">&#123;</span>
         <span style="color: #008080; font-style: italic;">//Split separa la cadena en un array de string utiizando los separadores especificados</span>
         <span style="color: #0600FF;">return</span> str.<span style="color: #0000FF;">Split</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #FF0000;">char</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> <span style="color: #000000;">&#123;</span> <span style="color: #666666;">' '</span>, <span style="color: #666666;">'.'</span>, <span style="color: #666666;">'?'</span>, <span style="color: #666666;">';'</span> , <span style="color: #666666;">':'</span> <span style="color: #000000;">&#125;</span>, StringSplitOptions.<span style="color: #0000FF;">RemoveEmptyEntries</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Length</span><span style="color: #008000;">;</span>
     <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Utilizando este ejemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">  <span style="color: #FF0000;">string</span> s <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;hello extension methods!&quot;</span><span style="color: #008000;">;</span>
  <span style="color: #FF0000;">int</span> count <span style="color: #008000;">=</span> s.<span style="color: #0000FF;">WordCount</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
  <span style="color: #008080; font-style: italic;">//Este código imprime: 3</span></pre></div></div>

<p>Este método podrá ser usado en todas las variables de tipo string,<strong> IntelliSense también los reconoce</strong> ya que no violan los principios de encapsulación, pues en realidad <strong>no modifican a la clase ni acceden a sus variables privadas</strong>.</p>
<p>Los métodos extensores se usan para extender una clase o interface; pero no para sobreescribirla. Un método extensor con el mismo nombre y signatura (parámetros) que un método de la clase o la interface, nunca será llamado: en tiempo de compilación, los métodos extensores <strong>tienen menor prioridad que los métodos definidos en el propio tipo</strong> y están definidos en el ámbito del namespace.</p>
<p>Veamos otro ejemplo un poco más complejo usando interfaces y genericidad:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">//Este método devuelve el mayor de una colección que sea </span>
<span style="color: #008080; font-style: italic;">//IEnumerable(List, array, LinkedList, etc)</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> T Mayor<span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span> IEnumerable items<span style="color: #000000;">&#41;</span> where T <span style="color: #008000;">:</span> IComparable
    <span style="color: #000000;">&#123;</span>
      T max <span style="color: #008000;">=</span> <span style="color: #0600FF;">default</span><span style="color: #000000;">&#40;</span>T<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #FF0000;">bool</span> empty <span style="color: #008000;">=</span> true<span style="color: #008000;">;</span>
      <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>T x <span style="color: #0600FF;">in</span> items<span style="color: #000000;">&#41;</span>
      <span style="color: #000000;">&#123;</span>
        max <span style="color: #008000;">=</span> x<span style="color: #008000;">;</span> empty <span style="color: #008000;">=</span> false<span style="color: #008000;">;</span>  break<span style="color: #008000;">;</span>
      <span style="color: #000000;">&#125;</span>
      <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>empty<span style="color: #000000;">&#41;</span> <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> Exception<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;The source cannot be empty&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>T x <span style="color: #0600FF;">in</span> items<span style="color: #000000;">&#41;</span>
      <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>x.<span style="color: #0000FF;">CompareTo</span><span style="color: #000000;">&#40;</span>max<span style="color: #000000;">&#41;</span> <span style="color: #008000;">&amp;</span>gt<span style="color: #008000;">;</span> <span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span>
          max <span style="color: #008000;">=</span> x<span style="color: #008000;">;</span>
      <span style="color: #000000;">&#125;</span>
      <span style="color: #0600FF;">return</span> max<span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span></pre></div></div>

<p>Como en el caso anterior, ahora en todas las clases que implementen la interfaz IEnumerable donde sus elementos se puedan comparar, tendremos un método Mayor, que devuelve el mayor elemento de la colección de objetos de tipo T genérico. Veamos algunos ejemplos de como usar este método:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #FF0000;">int</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> numeros <span style="color: #008000;">=</span> <span style="color: #000000;">&#123;</span> <span style="color: #FF0000;">10</span>, <span style="color: #008000;">-</span><span style="color: #FF0000;">60</span>, <span style="color: #FF0000;">20</span>, <span style="color: #008000;">-</span><span style="color: #FF0000;">50</span>, <span style="color: #FF0000;">30</span>, <span style="color: #008000;">-</span><span style="color: #FF0000;">40</span> <span style="color: #000000;">&#125;</span><span style="color: #008000;">;</span>
Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span>numeros.<span style="color: #0000FF;">Mayor</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">=;</span>
<span style="color: #008080; font-style: italic;">//se va a imprimir 30</span></pre></div></div>

<p>Otro ejemplo podría ser:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">List colores <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> List <span style="color: #000000;">&#123;</span> <span style="color: #666666;">&quot;rojo&quot;</span>, <span style="color: #666666;">&quot;verde&quot;</span>, <span style="color: #666666;">&quot;azul&quot;</span>, <span style="color: #666666;">&quot;blanco&quot;</span>, <span style="color: #666666;">&quot;negro&quot;</span><span style="color: #000000;">&#125;</span><span style="color: #008000;">;</span>
Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span>colores.<span style="color: #0000FF;">Mayor</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008080; font-style: italic;">//se va a imprimir verde, que es el mayor en orden alfabético</span></pre></div></div>

<p>Bueno, si quieren ver más ejemplos aquí les dejo unos cuantos <a href="http://www.puntopeek.com/wp-content/uploads/2011/07/metodos-extensores.zip">métodos extensores en C# para descargar</a> con sus probadores y todo, para que practiques y le saques el mayor partido a esta nueva característica de C#. Si tienes alguna duda, propuesta o no entiendes algo en los comentarios por favor. Proximamente estaremos hablando de LINQ, otra de las nuevas características de C# y .Net.</p>


<p>No hay entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://www.puntopeek.com/codigos-c/metodos-extensores-en-c-sharp-net/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Aplicaciones de Consola en C#</title>
		<link>http://www.puntopeek.com/programacion/creando-una-aplicacion-de-consola-c-sharp/</link>
		<comments>http://www.puntopeek.com/programacion/creando-una-aplicacion-de-consola-c-sharp/#comments</comments>
		<pubDate>Mon, 20 Jun 2011 10:07:36 +0000</pubDate>
		<dc:creator>Tomy</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Tutoriales C#]]></category>
		<category><![CDATA[Codigos C#]]></category>
		<category><![CDATA[Console]]></category>
		<category><![CDATA[ejemplos C#]]></category>

		<guid isPermaLink="false">http://www.puntopeek.com/?p=462</guid>
		<description><![CDATA[El principal motivo de este post, es que la mayor parte de los que leen este blog no saben como interactuar con el usuario a través de la consola (lo cual es comprensible), y no tienen una forma dinámica de &#8230; <a href="http://www.puntopeek.com/programacion/creando-una-aplicacion-de-consola-c-sharp/">seguir leyendo &#187;</a></p>


No hay entradas relacionadas.]]></description>
			<content:encoded><![CDATA[<p>El principal motivo de este post, es que la mayor parte de los que leen este blog no saben como interactuar con el usuario a través de la consola (lo cual es comprensible), y no tienen una forma dinámica de probar sus códigos. Generalmente cuando nos enseñan a programar, parten de la parte de como crear métodos, la sintaxis del lenguaje, las estructuras de control (for, foreach, etc) y se pasan por alto la parte de como crear una aplicación, donde el usuario vea resultados a traves de la consola. Bueno, empecemos desde 0:</p>
<h3>Crear una aplicación de Consola:</h3>
<p>Para esto, deberemos ir a File-&gt;New-&gt;Project si usas Visual Studio, pero con cualquier otro IDE debe ser algo parecido. Entonces se mostrará una nueva ventana como la de la figura, seleccionamos C# en el menu izquierdo y luego como tipo de proyecto marcamos &#8220;Console Apliccation&#8221;, le ponemos un nombre al proyecto y le damos Ok. Ya estaremos listos para empezar con el código.</p>
<p><a href="http://www.puntopeek.com/wp-content/uploads/2011/06/screenshot.jpg"><img class="alignnone size-full wp-image-463" title="new-console-apliccation" src="http://www.puntopeek.com/wp-content/uploads/2011/06/screenshot.jpg" alt="screenshot Aplicaciones de Consola en C#" width="566" height="342" /></a></p>
<h3>Métodos útiles para trabajar con la consola</h3>
<p>Para interactuar con el usuario es que existen algunos métodos básicos cuando trabajamos con la Consola. Veamos los más usados:</p>
<p><strong>1- Console.WriteLine();</strong><br />
Escribe una nueva linea en la consola, es como presionar Enter y escribir una linea. Por ejemplo, podemos hacer:<br />
Console.WriteLine(&#8220;Lo que quiera q salga en la consola&#8221;);<br />
También podremos imprimir las variables de nuestro programa, para esto hay dos formas, pero veamos mejor dos ejemplos que son lo mismo:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">//declaramos dos variables</span>
<span style="color: #FF0000;">string</span> nombre <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Invitado&quot;</span><span style="color: #008000;">;</span>
<span style="color: #FF0000;">int</span> edad <span style="color: #008000;">=</span> <span style="color: #FF0000;">22</span><span style="color: #008000;">;</span>
<span style="color: #008080; font-style: italic;">//Imprimimos una linea en la consola de dos formas distintas</span>
Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Tu nombre es: &quot;</span><span style="color: #008000;">+</span>nombre<span style="color: #008000;">+</span><span style="color: #666666;">&quot; y tienes &quot;</span> <span style="color: #008000;">+</span> edad <span style="color: #008000;">+</span> <span style="color: #666666;">&quot; años.&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008080; font-style: italic;">//En C# se usa el operador + para concatenar cadenas</span>
Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Tu nombre es {0} y tienes {1} años&quot;</span>, nombre, edad<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>Como ven la segunda vía es mucho más simple, solo debes recordar que el numero que está entre cochetes, es el indice del parámetro que se pasa al final del método.<br />
<strong>2- Console.Write()</strong><br />
Hace casi lo mismo que Console.WriteLine() pero sin cambiar de línea, o sea&#8230; concatena el texto que le pasemos al método con lo que se haya escrito hasta ese momento en la consola.</p>
<p><strong>3- Console.ReadLine()</strong><br />
Se usa para leer lo que el usuario escribió en la consola, y podemos guardarlo en una variable para despues usarlo en nuestro programa. No hay que pasarle ningún parámetro y el programa solo continuará cuando el usuario teclee alguna línea y presione Enter. Podemos hacer algo como esto:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Escriba su nombre&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #FF0000;">string</span> nombre <span style="color: #008000;">=</span> Console.<span style="color: #0000FF;">ReadLine</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>Importante: Si lo que queremos es recoger lo que el usuario escriba como un tipo en específico, por ejemplo, un entero, deberemos usar el método estático int.Parse, por ejemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #FF0000;">int</span> x <span style="color: #008000;">=</span> <span style="color: #FF0000;">int</span>.<span style="color: #0000FF;">Parse</span><span style="color: #000000;">&#40;</span>Console.<span style="color: #0000FF;">ReadLine</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>ya que lo que devuelve Console.ReadLine() es un string.</p>
<p><strong>4-Console.ReadKey()</strong><br />
Este método resulta importante algunas veces, sobre todo cuando queremos darle varias opciones al usuario (a, b, c, d). Aunque se puede utilizar Console.ReadLine(). En este caso, este método lo que devuelve es un objeto de tipo ConsoleKeyInfo, y se puede utilizar de la siguiente forma, por ejemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Presiona una tecla&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
ConsoleKeyInfo c <span style="color: #008000;">=</span> Console.<span style="color: #0000FF;">ReadKey</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Presionaste la tecla &quot;</span><span style="color: #008000;">+</span> c.<span style="color: #0000FF;">KeyChar</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<h3Interactuando con el usuario</h3>
<p>Bueno, estos son algunos de los métodos más importantes. Veamos ahora como está compuesto un proyecto de tipo consola. Lo primero que vemos es el namespace que se llama igual que el proyecto, luego vemos que hay una clase Program, la cual se llama así por defecto y dentro de esta, un método Main() con la siguiente signatura:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> Main<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> args<span style="color: #000000;">&#41;</span></pre></div></div>

<p>
Este es el punto de entrada de nuestra aplicación, el método se llama así por defecto y no se debe cambiar ni añadir ningún parámetro. Bueno, vamos ya a escribir un poco de código, como ejemplo, vamos a calcular la edad de un usuario pidiendole que nos diga el año de nacimiento. Para esto crearemos otro método estático (dentro de Program) que le pasaremos un año de nacimiento y calcula la edad. Veamos:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #FF0000;">int</span> DameEdad<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> dia, <span style="color: #FF0000;">int</span> mes, <span style="color: #FF0000;">int</span> año<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
     <span style="color: #008080; font-style: italic;">//Usamos la clase DateTime y un método estatico para restar fechas</span>
     DateTime fecha_nacimiento <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> DateTime<span style="color: #000000;">&#40;</span>año, mes, dia<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
     TimeSpan edad <span style="color: #008000;">=</span> DateTime.<span style="color: #0000FF;">Now</span>.<span style="color: #0000FF;">Subtract</span><span style="color: #000000;">&#40;</span>fecha_nacimiento<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
     <span style="color: #0600FF;">return</span> <span style="color: #000000;">&#40;</span>edad.<span style="color: #0000FF;">Days</span><span style="color: #008000;">/</span><span style="color: #FF0000;">365</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Este método hace uso de la clase DateTime de .Net, que tiene muchas funcionalidades, entre ellas permite restar dos fechas, lo cual sería un algoritmo un poco pesado de programar (no es tan sencillo como restar los años). Cuando hacemos DateTime.Now, accedemos a la fecha actual que tenemos en nuestra PC, por ultimo devolvemos la cantidad de dias que han pasado entre las dos fechas y lo dividimos entre la cantidad de dias que tiene un año.</p>
<p>Ahora veamos como programar el método Main para interactuar con el usuario, pedirle la fecha, y encargarnos que la introduzca correctamente. El código sería algo así:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">private</span> <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> Main<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> args<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #008080; font-style: italic;">//Variables que usaremos para la fecha de nacimiento</span>
    <span style="color: #FF0000;">int</span> dia_nacimiento, mes_nacimiento, año_nacimiento<span style="color: #008000;">=</span><span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
&nbsp;
    Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Escriba su nombre&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #FF0000;">string</span> nombre <span style="color: #008000;">=</span> Console.<span style="color: #0000FF;">ReadLine</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Hola {0}, bienvenido a mi aplicacion!&quot;</span>,nombre<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Por favor, introduce tu fecha de nacimiento:&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #008080; font-style: italic;">//El while solo termina cuando se hace break</span>
    <span style="color: #0600FF;">while</span> <span style="color: #000000;">&#40;</span><span style="color: #0600FF;">true</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #008080; font-style: italic;">//Pedimos el dia y lo validamos</span>
        Console.<span style="color: #0000FF;">Write</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Dia de nacimiento: &quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        dia_nacimiento <span style="color: #008000;">=</span> <span style="color: #FF0000;">int</span>.<span style="color: #0000FF;">Parse</span><span style="color: #000000;">&#40;</span>Console.<span style="color: #0000FF;">ReadLine</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>dia_nacimiento <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">1</span> <span style="color: #008000;">||</span> dia_nacimiento <span style="color: #008000;">&gt;</span> <span style="color: #FF0000;">31</span><span style="color: #000000;">&#41;</span>
             Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Por favor, especifique un dia entre 1 y 31&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #0600FF;">else</span>
             <span style="color: #008080; font-style: italic;">//Si el dia es valido, entonces pasamos a pedir el mes</span>
             break<span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #0600FF;">while</span> <span style="color: #000000;">&#40;</span><span style="color: #0600FF;">true</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #008080; font-style: italic;">//Pedimos el mes y lo validamos</span>
        Console.<span style="color: #0000FF;">Write</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Mes de nacimiento: &quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        mes_nacimiento <span style="color: #008000;">=</span> <span style="color: #FF0000;">int</span>.<span style="color: #0000FF;">Parse</span><span style="color: #000000;">&#40;</span>Console.<span style="color: #0000FF;">ReadLine</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>mes_nacimiento <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">1</span> <span style="color: #008000;">||</span> mes_nacimiento <span style="color: #008000;">&gt;</span> <span style="color: #FF0000;">12</span><span style="color: #000000;">&#41;</span>
             Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Por favor, especifique un mes entre 1 y 12&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #0600FF;">else</span>
             break<span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
    <span style="color: #0600FF;">while</span> <span style="color: #000000;">&#40;</span><span style="color: #0600FF;">true</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #008080; font-style: italic;">//Pedimos el año y lo validamos</span>
        Console.<span style="color: #0000FF;">Write</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Año de nacimiento: &quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        año_nacimiento <span style="color: #008000;">=</span> <span style="color: #FF0000;">int</span>.<span style="color: #0000FF;">Parse</span><span style="color: #000000;">&#40;</span>Console.<span style="color: #0000FF;">ReadLine</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008080; font-style: italic;">//El año no puede ser posterior a 1900 y anterior al año actual</span>
        <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>año_nacimiento <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">1900</span> <span style="color: #008000;">||</span> año_nacimiento <span style="color: #008000;">&gt;</span> DateTime.<span style="color: #0000FF;">Now</span>.<span style="color: #0000FF;">Year</span><span style="color: #000000;">&#41;</span>
             Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Por favor, especifique un año entre 1900 y el {0}&quot;</span>, DateTime.<span style="color: #0000FF;">Now</span>.<span style="color: #0000FF;">Year</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #0600FF;">else</span>
             break<span style="color: #008000;">;</span>
     <span style="color: #000000;">&#125;</span>
     <span style="color: #008080; font-style: italic;">//Si llegamos aqui, es porque tenemos una fecha correcta, vamos a calcular la edad con</span>
     <span style="color: #008080; font-style: italic;">//el método DameEdad() que escribimos antes</span>
     <span style="color: #FF0000;">int</span> edad <span style="color: #008000;">=</span> DameEdad<span style="color: #000000;">&#40;</span>dia_nacimiento, mes_nacimiento,año_nacimiento<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
     Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span>nombre<span style="color: #008000;">+</span><span style="color: #666666;">&quot;, usted tiene &quot;</span> <span style="color: #008000;">+</span> edad <span style="color: #008000;">+</span> <span style="color: #666666;">&quot; años.&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
     Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Presione cualquier tecla para terminar el programa&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
     Console.<span style="color: #0000FF;">ReadKey</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Por supuesto el código se puede hacer más eficiente y mucho más corto, pero quería mostrarte el uso de las funciones mencionadas antes. El código está bastante bien comentado, y espero que con las cosas que expliqué antes se entienda sin problemas. También <strong><a href="http://www.puntopeek.com/wp-content/uploads/2011/06/Calcula-Edad.zip">les dejo el proyecto</a> </strong>para que lo descarguen. Cualquier duda o aporte, en los comentarios.</p>


<p>No hay entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://www.puntopeek.com/programacion/creando-una-aplicacion-de-consola-c-sharp/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Cola con Prioridad en C#</title>
		<link>http://www.puntopeek.com/codigos-c/cola-prioridad-heap-codigo-en-c-sharp/</link>
		<comments>http://www.puntopeek.com/codigos-c/cola-prioridad-heap-codigo-en-c-sharp/#comments</comments>
		<pubDate>Mon, 31 Jan 2011 07:22:00 +0000</pubDate>
		<dc:creator>Tomy</dc:creator>
				<category><![CDATA[Codigos C#]]></category>
		<category><![CDATA[Tutoriales C#]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[estructuras C#]]></category>

		<guid isPermaLink="false">http://www.puntopeek.com/?p=390</guid>
		<description><![CDATA[Existen diversas formas de implementar una cola con prioridad, pero en casi todas, alguna de las operaciones principales son en O(n). En este post, veremos una forma eficiente de implementar esta estructura usando un Árbol Parcialmente Ordenado (Heap).


Entradas relacionadas<li><a href='http://www.puntopeek.com/codigos-c/la-clase-arbol-en-c/' rel='bookmark' title='Permanent Link: La clase Arbol en C#'>La clase Arbol en C#</a></li>
<li><a href='http://www.puntopeek.com/codigos-c/la-clase-linkednode-en-c-interfaz-ilist/' rel='bookmark' title='Permanent Link: La clase LinkedNode en C#. Interfaz Ilist'>La clase LinkedNode en C#. Interfaz Ilist</a></li>
]]></description>
			<content:encoded><![CDATA[<p>Cuando hablamos de<strong> colas con prioridad </strong>hablamos de una lista de elementos ordenados según su prioridad, que es una función asignada a cada elemento de la cola.</p>
<p>La estructura cola (queue) está basada en el principio que plantea que “el primero en entrar a la cola es el primero en salir (First In First Out), de aquí que a estas estructuras se le llaman <em>(FIFO)</em>. En este caso no se va a cumplir este principio, ya que los elementos van a estar ordenados en función de la prioridad. Las operaciones que definiremos sobre una cola con prioridad son:</p>
<p><strong>Insertar</strong> &#8211; Inserta un elemento en la cola con prioridad. Luego de esta operación, el elemento insertado estará en su posición de acuerdo con su prioridad.</p>
<p><strong>Extrae-Min (Extrae-Max)</strong> – Extrae el elemento de mayor prioridad de la cola.</p>
<p><strong>Devuelve-Min (Devuelve-Max)</strong> – Retorna el elemento de mayor prioridad, pero no lo elimina.</p>
<p>Esta estructura pudiera ser útil, por ejemplo, en la sala de urgencia de un hospital, donde cada paciente debe ser atendido en función de su gravedad. Luego, con esta estructura podríamos formar un orden entre los pacientes logrando que los pacientes mas graves fueran atendidos primero.</p>
<p>Existen diversas formas de implementar esta estructura, pero en casi todas, alguna de las operaciones principales (ExtraeMin o Insertar) son de orden lineal respecto a la cantidad n de elementos que se almacenan. En este post, veremos cómo lograr una buena implementación de esta estructura usando un tipo de árbol binario que cumple ciertas características, llamado <strong>Árbol Parcialmente Ordenado (Heap)</strong>, donde ambas operaciones serán <em>O(log(n))</em>. Veamos formalmente que es un <em>heap</em>.</p>
<h2>Que es un Heap?</h2>
<p>Un Heap es un árbol que tiene las siguientes características:</p>
<p>i. Es un árbol binario.<br />
ii. Todos los niveles están llenos, excepto, quizás, el último.<br />
iii. Los niveles se van llenando de izquierda a derecha. Si el árbol no es completo, en el último nivel, las hojas están agrupadas a la izquierda.<br />
iv. Cada nodo tiene una prioridad mayor que la de sus dos hijos.</p>
<p><a href="http://www.puntopeek.com/wp-content/uploads/2011/01/heap.png"><img class="alignnone size-full wp-image-391" title="heap" src="http://www.puntopeek.com/wp-content/uploads/2011/01/heap.png" alt="heap Cola con Prioridad en C#" width="467" height="211" /></a></p>
<h2>Heap como árbol parcialmente ordenado</h2>
<p>Lo primero que podemos ver es que puede haber varios elementos con una misma prioridad, y lo segundo es que el árbol no está ordenado completamente, es decir, entre sus hijos no hay prioridad. Como vimos en el post anterior con los <a href="http://www.puntopeek.com/codigos-c/la-clase-arbol-en-c/">arboles binarios de búsquedas</a>, donde el hijo izquierdo tenía que ser menor que el padre y este a su vez, menor que el hijo derecho. De aquí que este tipo de árbol binario se conoce como <strong>Árbol Parcialmente Ordenado</strong>, porque no define un orden total entre sus nodos.</p>
<p>Como hablamos de un árbol binario, podríamos pensar en representar un Heap con un arreglo donde A[0] es la raíz del árbol, el hijo izquierdo del nodo i será A[2*i+1] y el derecho A[2*i+2].</p>
<h2>Operaciones con el Heap</h2>
<p>Veamos ahora como serían los métodos para garantizar que las operaciones sean O(log(n)):<br />
<strong>DEVUELVE-MIN</strong>(<em>Heap h</em>)<br />
1 <strong>if</strong>(count(h)&gt;0)<br />
2  <strong>do return</strong> A[0]</p>
<p>Claramente este primer método es bastante sencillo, ya que el elemento de mayor prioridad siempre va a ser la raíz</p>
<p><strong>EXTRAE-MIN</strong>(Heap H)<br />
1  <strong>Intercambiar</strong>(0,n);<br />
2  H[n] ←null;<br />
3  n←n+1<br />
4  <strong>HEAPIFY</strong>( 0);</p>
<p>En Extrae-Min lo que hacemos es eliminar el nodo raíz y poner el ultimo nodo a la derecha del primer nivel como raíz, disminuimos la cantidad de elementos y llamamos a un método llamado recursivo heapify que será el encargado de ubicar al elemento A[0] en su posición de acuerdo a su prioridad. Para esto, lo que hace es en cada paso del algoritmo ver si se viola alguna de las condiciones, y en caso positivo, lo intercambiar con el hijo de menor prioridad, esto es lo que hace que las operaciones sean O(log(n)), veamos un pseudocódigo para ilustrar mejor la idea:</p>
<p><strong>HEAPIFY</strong> (Heap H, nodo i)<br />
1  <strong>if</strong>(i&lt;left(i) and i&lt;right(i))<br />
2  <strong>do return</strong>;<br />
3  max = <strong>Max</strong>(left(i), right(i);<br />
4  <strong>Intercambiar</strong>(i,max);<br />
5 <strong> Heapify</strong>(H, max);</p>
<p>Luego, el método Insert(Heap H, x) sería agregar el nuevo elemento al final del array que representa el Heap y hacer heapify, pero en este caso en el orden contrario, desde las hojas hacia la raíz. A continuación el pseudocódigo:</p>
<p><strong>INSERT</strong>(Heap H, x)<br />
1  n←n+1<br />
2  H[n] ←x;<br />
4  <strong>HEAPIFY</strong>( n);</p>
<p>Esto es básicamente una buena implementación de Heap con array, que mejora un poco la representación por Arbol, ya que para insertar un nuevo elemento, nos evitamos el trabajo de buscar cual es la hoja más a la derecha, que como sabemos, en la representación por array será el nodo de la posición n.</p>
<h2>Código en C# de un Heap</h2>
<p>Bueno, aquí les dejo una <a href="http://www.puntopeek.com/wp-content/uploads/2011/01/Heap.zip"><strong>implementación de Heap en C#</strong></a> que hice el año pasado como parte de una tarea. El código está bien comentado y entendible. De cualquier forma, si ves algún error o tienes alguna duda, en los comentarios. <a href="http://www.codeproject.com/KB/recipes/priorityqueue.aspx">Otra implementación</a> que he usado es proyectos más grandes es la que ofrecen en CodeProjects, que es una clase PriorityQueue mucho más completa, con más métodos y propiedades.</p>


<p>Entradas relacionadas<li><a href='http://www.puntopeek.com/codigos-c/la-clase-arbol-en-c/' rel='bookmark' title='Permanent Link: La clase Arbol en C#'>La clase Arbol en C#</a></li>
<li><a href='http://www.puntopeek.com/codigos-c/la-clase-linkednode-en-c-interfaz-ilist/' rel='bookmark' title='Permanent Link: La clase LinkedNode en C#. Interfaz Ilist'>La clase LinkedNode en C#. Interfaz Ilist</a></li>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.puntopeek.com/codigos-c/cola-prioridad-heap-codigo-en-c-sharp/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>La clase Arbol en C#</title>
		<link>http://www.puntopeek.com/codigos-c/la-clase-arbol-en-c/</link>
		<comments>http://www.puntopeek.com/codigos-c/la-clase-arbol-en-c/#comments</comments>
		<pubDate>Sun, 28 Nov 2010 22:31:47 +0000</pubDate>
		<dc:creator>Tomy</dc:creator>
				<category><![CDATA[Codigos C#]]></category>
		<category><![CDATA[Tutoriales C#]]></category>
		<category><![CDATA[arboles]]></category>
		<category><![CDATA[clases]]></category>
		<category><![CDATA[estructuras C#]]></category>

		<guid isPermaLink="false">http://www.puntopeek.com/?p=384</guid>
		<description><![CDATA[Los árboles son una de las estructuras de datos más comunes en la programación de software para almacenar y procesar datos, gracias a sus innumerables aplicaciones. En este post veremos algunas características de los árboles y las implementaciones de algunos &#8230; <a href="http://www.puntopeek.com/codigos-c/la-clase-arbol-en-c/">seguir leyendo &#187;</a></p>


Entradas relacionadas<li><a href='http://www.puntopeek.com/codigos-c/cola-prioridad-heap-codigo-en-c-sharp/' rel='bookmark' title='Permanent Link: Cola con Prioridad en C#'>Cola con Prioridad en C#</a></li>
<li><a href='http://www.puntopeek.com/codigos-c/la-clase-linkednode-en-c-interfaz-ilist/' rel='bookmark' title='Permanent Link: La clase LinkedNode en C#. Interfaz Ilist'>La clase LinkedNode en C#. Interfaz Ilist</a></li>
]]></description>
			<content:encoded><![CDATA[<p>Los árboles son una de las estructuras de datos más comunes en la programación de software para almacenar y procesar datos, gracias a sus innumerables aplicaciones. En este post veremos algunas características de los árboles y las implementaciones de algunos métodos y propiedades usando C#.</p>
<p>Informalmente, un árbol es una colección de objetos llamados nodos, de los cuales uno constituye la raíz. Sobre los nodos se define una relación “ser padre” que garantiza la estructura jerárquica entre los nodos. Como se puede apreciar, un hijo de un nodo de un árbol, es también un árbol, por lo que podemos definir un árbol recursivamente como una estructura formada por un nodo raíz r y un conjunto de árboles cuyas raíces son los hijos de r.</p>
<p><a href="http://www.puntopeek.com/wp-content/uploads/2010/11/arbol.png"><img class="alignnone size-full wp-image-385" title="arbol" src="http://www.puntopeek.com/wp-content/uploads/2010/11/arbol.png" alt="arbol La clase Arbol en C#" width="320" height="200" /></a></p>
<h2>Algunas definiciones</h2>
<p>Un nodo es hoja si no es padre de ningún nodo.<br />
Un árbol que no tenga ningún nodo es un árbol nulo.<br />
Un árbol es ordenado si existe una relación de orden entre los hijos de un nodo.<br />
Un árbol binario es un árbol donde cada nodo tiene como máximo dos hijos. De igual forma podemos definir un árbol k-ario, donde cada nodo tiene a lo sumo k hijos.<br />
Un árbol binario ordenado es un árbol donde cada nodo tiene un hijo izquierdo y un hijo derecho.<br />
Veamos algunos métodos y propiedades que se pueden tener en un árbol:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> Add<span style="color: #000000;">&#40;</span>T x<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #000000;">&#40;</span>agrega un objeto al árbol<span style="color: #000000;">&#41;</span>
<span style="color: #0600FF;">public</span> <span style="color: #FF0000;">bool</span> Contains<span style="color: #000000;">&#40;</span>T x<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #000000;">&#40;</span>dice si el árbol contiene el objeto especificado<span style="color: #000000;">&#41;</span>
<span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> Widht<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #000000;">&#40;</span>devuelve el ancho del árbol, o sea el total de hojas<span style="color: #000000;">&#41;</span>
<span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> Height<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #000000;">&#40;</span>devuelve la altura del árbol, que es la mayor distancia desde la raíz a una de la hojas<span style="color: #000000;">&#41;</span>
<span style="color: #0600FF;">public</span> <span style="color: #FF0000;">object</span> Value<span style="color: #000000;">&#123;</span>get<span style="color: #008000;">;</span><span style="color: #000000;">&#125;</span> <span style="color: #000000;">&#40;</span>devuelve el valor de la raíz del árbol<span style="color: #000000;">&#41;</span></pre></div></div>

<p>Nota: Si no estás familiarizado con la notación “T x” utilizada para clases genéricas, puedes leer aquí sobre <a href="http://www.puntopeek.com/programacion/genericidad-ejemplos-c-sharp/">genericidad en C#</a>.</p>
<p>Existen varias formas de recorrer un árbol, en dependencia de cómo estén ordenados, los recorridos más comunes son preorden, entreorden, a lo ancho y postorden.</p>
<p>PreOrden: Este recorrido imprime primero los padres y después los hijos en preorden. El algoritmo sería el siguiente:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> Preorder<span style="color: #000000;">&#40;</span>Tree t<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
   <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>T key <span style="color: #0600FF;">in</span> t.<span style="color: #0000FF;">Keys</span><span style="color: #000000;">&#41;</span>
     <span style="color: #008080; font-style: italic;">//Imprime la llave i-esima</span>
     Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span>key<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
   <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>Tree child <span style="color: #0600FF;">in</span> t.<span style="color: #0000FF;">Childs</span><span style="color: #000000;">&#41;</span>
     <span style="color: #008080; font-style: italic;">//Recorrer en preorden el hijo i-esimo</span>
     Preorder<span style="color: #000000;">&#40;</span>child<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>El resultado de este recorrido para el árbol de la figura anterior sería A, B, C, D, E, F.</p>
<p>EntreOrden: Primero se imprime el primer hijo izquierdo con su recorrido EntreOrden, después la raíz, y luego el segundo hijo en EntreOrden, y así sucesivamente los restantes hijos. Si el árbol en cuestión es un árbol binario ordenado (ABB) el recorrido sería exactamente una ordenación de los elementos de dicho árbol, ya que hay un orden establecido entre los hijos, pero luego trataremos un post completo sobre los árboles binarios de búsqueda, que tienen algunas aplicaciones y propiedades importantes.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> EntreOrden <span style="color: #000000;">&#40;</span>Tree t<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
   <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>t.<span style="color: #0000FF;">Childs</span>.<span style="color: #0000FF;">Length</span><span style="color: #008000;">&amp;</span>gt<span style="color: #008000;">;</span><span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span>
      <span style="color: #008080; font-style: italic;">// Recorre en simétrico el primer hijo</span>
      EntreOrden<span style="color: #000000;">&#40;</span>t.<span style="color: #0000FF;">Childs</span><span style="color: #000000;">&#91;</span><span style="color: #FF0000;">0</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
   <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&amp;</span>lt<span style="color: #008000;">;</span> t.<span style="color: #0000FF;">Childs</span>.<span style="color: #0000FF;">Length</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
   <span style="color: #000000;">&#123;</span>
      <span style="color: #008080; font-style: italic;">// Imprime la llave (i-1)-esima</span>
      Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span>t.<span style="color: #0000FF;">Keys</span><span style="color: #000000;">&#91;</span>i <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #008080; font-style: italic;">// Recorre en entreorden el hijo i-esimo</span>
      EntreOrden<span style="color: #000000;">&#40;</span>t.<span style="color: #0000FF;">Childs</span><span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Para el ejemplo anterior tendríamos el siguiente recorrido: B, A, D, C, E, F<br />
PostOrden: Se recorren primero los hijos y luego los padres en postorden.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> PostOrden<span style="color: #000000;">&#40;</span>Tree t<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
   <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>Tree child <span style="color: #0600FF;">in</span> t.<span style="color: #0000FF;">Childs</span><span style="color: #000000;">&#41;</span>
      <span style="color: #008080; font-style: italic;">// Recorre en postorden el hijo i-esimo</span>
      PostOrden<span style="color: #000000;">&#40;</span>child<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
   <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>T key <span style="color: #0600FF;">in</span> t.<span style="color: #0000FF;">Keys</span><span style="color: #000000;">&#41;</span>
      <span style="color: #008080; font-style: italic;">// Imprime la llave i-esima</span>
      Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span>key<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>El recorrido postorden para el ejemplo sería B, D, E, F, C, A</p>
<p>Por último, le dejo algunos códigos que hice hace algunos años donde pueden ver otros métodos y funcionalidades de la clase árbol (añadir elementos, eliminar, altura, espejo, ancho, recorridos, dibujar arbol,  etc), también añadí la clase <strong>árbol binario</strong>, que hereda de la <strong>clase árbol</strong>, y una aplicación de consola donde se prueban varios métodos de estas clases.</p>
<p>Espero que les sirva de ayuda. Si tienen alguna duda con el código, dejen su comentario.</p>
<p><a href="http://www.puntopeek.com/wp-content/uploads/2010/11/ArbolClass.zip" target="_blank">Descargar Código</a></p>


<p>Entradas relacionadas<li><a href='http://www.puntopeek.com/codigos-c/cola-prioridad-heap-codigo-en-c-sharp/' rel='bookmark' title='Permanent Link: Cola con Prioridad en C#'>Cola con Prioridad en C#</a></li>
<li><a href='http://www.puntopeek.com/codigos-c/la-clase-linkednode-en-c-interfaz-ilist/' rel='bookmark' title='Permanent Link: La clase LinkedNode en C#. Interfaz Ilist'>La clase LinkedNode en C#. Interfaz Ilist</a></li>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.puntopeek.com/codigos-c/la-clase-arbol-en-c/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>El método de ordenación QuickSort</title>
		<link>http://www.puntopeek.com/codigos-c/metodo-ordenacion-quicksort-cshar/</link>
		<comments>http://www.puntopeek.com/codigos-c/metodo-ordenacion-quicksort-cshar/#comments</comments>
		<pubDate>Wed, 13 Oct 2010 05:20:32 +0000</pubDate>
		<dc:creator>Tomy</dc:creator>
				<category><![CDATA[Codigos C#]]></category>
		<category><![CDATA[Tutoriales C#]]></category>
		<category><![CDATA[algoritmos]]></category>
		<category><![CDATA[array]]></category>

		<guid isPermaLink="false">http://www.puntopeek.com/?p=374</guid>
		<description><![CDATA[Hoy les presento un método de ordenación que ha dado muy buenos resultados y es considerado el método de ordenación más rápido que existe, de ahí viene su nombre tan sugerente: QuickSort. Aunque su caso peor es O(n2), la probabilidad &#8230; <a href="http://www.puntopeek.com/codigos-c/metodo-ordenacion-quicksort-cshar/">seguir leyendo &#187;</a></p>


Entradas relacionadas<li><a href='http://www.puntopeek.com/codigos-c/ordenacion-por-burbuja-en-c/' rel='bookmark' title='Permanent Link: Ordenacion por burbuja en C#'>Ordenacion por burbuja en C#</a></li>
<li><a href='http://www.puntopeek.com/codigos-c/el-metodo-de-ordenacion-merge-sort/' rel='bookmark' title='Permanent Link: Ordenación por mezcla en C#'>Ordenación por mezcla en C#</a></li>
]]></description>
			<content:encoded><![CDATA[<p>Hoy les presento un método de ordenación que ha dado muy buenos resultados y es considerado el <strong>método de ordenación más rápido que existe</strong>, de ahí viene su nombre tan sugerente: QuickSort. Aunque su caso peor es O(<em>n</em><sup>2</sup>), la probabilidad de que esto ocurra es muy baja si tomamos algunas de sus variantes aleatorias. Su caso promedio es O(<em>n</em> log <em>n</em>) y es lo que determina la eficiencia de este método.</p>
<p>La idea de este algoritmo de ordenación es particionar el arreglo de elementos en dos subarreglos, no necesariamente de igual tamaño, donde cualquier elemento de la primera será menor que todo elemento de la segunda partición. Esto se logra seleccionando un valor aleatorio del arreglo, y una vez realizada esta parte del algoritmo, se aplica el algoritmo recursivamente a cada una de los subarreglos semiordenados.</p>
<p>En la práctica, se usa QuickSort hasta obtener subarreglos de un tamaño fijo mucho menor (una longitud que ha traído buenos resultados es 20). Entonces se aplica <strong>Ordenación por Inserción </strong>a estos subarreglos, que es bastante eficiente cuando el arreglo está casi ordenado y hay pocas inversiones.</p>
<p>Veamos ahora el pseudocódigo, para entender un poco mejor que hace este maravilloso algoritmo de búsqueda:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">void</span> QuickSort<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> A<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
QuickSort<span style="color: #000000;">&#40;</span>A, <span style="color: #FF0000;">0</span>, A.<span style="color: #0000FF;">Length</span> <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #0600FF;">void</span> QuickSort <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> A, <span style="color: #FF0000;">int</span> p, <span style="color: #FF0000;">int</span> r<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#123;</span>
   <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>p <span style="color: #008000;">&lt;</span> r<span style="color: #000000;">&#41;</span>
   <span style="color: #000000;">&#123;</span>
      <span style="color: #FF0000;">int</span> q <span style="color: #008000;">=</span> Partition<span style="color: #000000;">&#40;</span>A, p, r<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #008080; font-style: italic;">//ordena los primeros q elementos</span>
      QuickSort <span style="color: #000000;">&#40;</span>A, p, q<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #008080; font-style: italic;">//ordena los restantes n - q elementos</span>
      QuickSort <span style="color: #000000;">&#40;</span>A, q <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span>, r<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #FF0000;">int</span> Partition<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> A, <span style="color: #FF0000;">int</span> p, <span style="color: #FF0000;">int</span> r<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
   <span style="color: #008080; font-style: italic;">//elemento pivote del arreglo</span>
   <span style="color: #FF0000;">int</span> x <span style="color: #008000;">=</span> A<span style="color: #000000;">&#91;</span>p<span style="color: #000000;">&#93;</span><span style="color: #008000;">;</span>
   <span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> p <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span>
   <span style="color: #FF0000;">int</span> j <span style="color: #008000;">=</span> r <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span>
&nbsp;
   <span style="color: #0600FF;">while</span> <span style="color: #000000;">&#40;</span><span style="color: #0600FF;">true</span><span style="color: #000000;">&#41;</span>
   <span style="color: #000000;">&#123;</span>
      <span style="color: #0600FF;">do</span> j<span style="color: #008000;">--;</span> <span style="color: #0600FF;">while</span> <span style="color: #000000;">&#40;</span>x <span style="color: #008000;">&lt;</span> A<span style="color: #000000;">&#91;</span>j<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #0600FF;">do</span> i<span style="color: #008000;">++;</span> <span style="color: #0600FF;">while</span> <span style="color: #000000;">&#40;</span>A<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span> <span style="color: #008000;">&gt;</span> x<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>i <span style="color: #008000;">&gt;</span> j<span style="color: #000000;">&#41;</span>
         Swap<span style="color: #000000;">&#40;</span>A, i, j<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #0600FF;">else</span>
         <span style="color: #0600FF;">return</span> j<span style="color: #008000;">;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>El método Partition(), lo que hace es intercambiar elementos que estén invertidos, en función del pivote seleccionado. O sea, Pone a un lados, los elementos menores que el pivote, y al otro lado, los mayores.</p>
<p>Les dejo una implementación en C# que hice hace algún tiempo, si ven algún problema me dicen. Si tienen alguna duda o pregunta, en los comentarios.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">//Ordenacion rapida (QuickSort)</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> QuickSort<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> a<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
   QuickSort<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">0</span>,a.<span style="color: #0000FF;">Length</span><span style="color: #008000;">-</span><span style="color: #FF0000;">1</span>,a<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #0600FF;">private</span> <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> QuickSort<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> ini,<span style="color: #FF0000;">int</span> fin,<span style="color: #FF0000;">int</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> a<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
   <span style="color: #FF0000;">int</span> left<span style="color: #008000;">=</span>ini<span style="color: #008000;">;</span>
   <span style="color: #FF0000;">int</span> right<span style="color: #008000;">=</span>fin<span style="color: #008000;">;</span>
   <span style="color: #FF0000;">int</span> mid<span style="color: #008000;">=</span>a<span style="color: #000000;">&#91;</span><span style="color: #000000;">&#40;</span>ini<span style="color: #008000;">+</span>fin<span style="color: #000000;">&#41;</span><span style="color: #008000;">/</span><span style="color: #FF0000;">2</span><span style="color: #000000;">&#93;</span><span style="color: #008000;">;</span>
&nbsp;
   <span style="color: #0600FF;">do</span>
   <span style="color: #000000;">&#123;</span>
      <span style="color: #008080; font-style: italic;">//Este es el Partition</span>
      <span style="color: #0600FF;">while</span><span style="color: #000000;">&#40;</span>a<span style="color: #000000;">&#91;</span>left<span style="color: #000000;">&#93;</span><span style="color: #008000;">&lt;</span>mid<span style="color: #000000;">&#41;</span>
         left<span style="color: #008000;">++;</span>
      <span style="color: #0600FF;">while</span><span style="color: #000000;">&#40;</span>a<span style="color: #000000;">&#91;</span>right<span style="color: #000000;">&#93;</span><span style="color: #008000;">&gt;</span>mid<span style="color: #000000;">&#41;</span>
         right<span style="color: #008000;">--;</span>
      <span style="color: #0600FF;">if</span><span style="color: #000000;">&#40;</span>left<span style="color: #008000;">&lt;=</span>right<span style="color: #000000;">&#41;</span>
      <span style="color: #000000;">&#123;</span>
        <span style="color: #008080; font-style: italic;">//Intercambio los elementos</span>
        <span style="color: #008080; font-style: italic;">//si estan invertidos</span>
        <span style="color: #FF0000;">int</span> t<span style="color: #008000;">=</span>a<span style="color: #000000;">&#91;</span>left<span style="color: #000000;">&#93;</span><span style="color: #008000;">;</span>
        a<span style="color: #000000;">&#91;</span>left<span style="color: #000000;">&#93;</span><span style="color: #008000;">=</span>a<span style="color: #000000;">&#91;</span>right<span style="color: #000000;">&#93;</span><span style="color: #008000;">;</span>
        a<span style="color: #000000;">&#91;</span>right<span style="color: #000000;">&#93;</span><span style="color: #008000;">=</span>t<span style="color: #008000;">;</span>
        left<span style="color: #008000;">++;</span>
        right<span style="color: #008000;">--;</span>
      <span style="color: #000000;">&#125;</span>
   <span style="color: #000000;">&#125;</span>
   <span style="color: #0600FF;">while</span><span style="color: #000000;">&#40;</span>left<span style="color: #008000;">&lt;=</span>right<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
   <span style="color: #008080; font-style: italic;">//Ordeno recursivamente los dos subarreglos</span>
   <span style="color: #0600FF;">if</span><span style="color: #000000;">&#40;</span>left<span style="color: #008000;">&lt;</span>fin<span style="color: #000000;">&#41;</span>
      QuickSort<span style="color: #000000;">&#40;</span>left,fin,a<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
   <span style="color: #0600FF;">if</span><span style="color: #000000;">&#40;</span>right<span style="color: #008000;">&gt;</span>ini<span style="color: #000000;">&#41;</span>
      QuickSort<span style="color: #000000;">&#40;</span>ini,right,a<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>



<p>Entradas relacionadas<li><a href='http://www.puntopeek.com/codigos-c/ordenacion-por-burbuja-en-c/' rel='bookmark' title='Permanent Link: Ordenacion por burbuja en C#'>Ordenacion por burbuja en C#</a></li>
<li><a href='http://www.puntopeek.com/codigos-c/el-metodo-de-ordenacion-merge-sort/' rel='bookmark' title='Permanent Link: Ordenación por mezcla en C#'>Ordenación por mezcla en C#</a></li>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.puntopeek.com/codigos-c/metodo-ordenacion-quicksort-cshar/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Genericidad en C#. Ejemplos</title>
		<link>http://www.puntopeek.com/programacion/genericidad-ejemplos-c-sharp/</link>
		<comments>http://www.puntopeek.com/programacion/genericidad-ejemplos-c-sharp/#comments</comments>
		<pubDate>Sun, 06 Jun 2010 07:03:14 +0000</pubDate>
		<dc:creator>Tomy</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Tutoriales C#]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[ejemplos C#]]></category>

		<guid isPermaLink="false">http://www.puntopeek.com/?p=296</guid>
		<description><![CDATA[Si no sabes que es la genericidad, te aconsejo que prestes atención, porque sin duda esta nueva característica, que se presenta a partir de la versión 2.0 del Framework .Net, te cambiará totalmente la forma de ver las cosas y &#8230; <a href="http://www.puntopeek.com/programacion/genericidad-ejemplos-c-sharp/">seguir leyendo &#187;</a></p>


Entradas relacionadas<li><a href='http://www.puntopeek.com/tutoriales-c/herencia-programacion-en-c/' rel='bookmark' title='Permanent Link: Herencia en C#. Concepto y ejemplos'>Herencia en C#. Concepto y ejemplos</a></li>
<li><a href='http://www.puntopeek.com/programacion/linq-c-sharp-ejemplos-caracteristicas/' rel='bookmark' title='Permanent Link: LINQ con C#. Ejemplos'>LINQ con C#. Ejemplos</a></li>
]]></description>
			<content:encoded><![CDATA[<p>Si no sabes que es la genericidad, te aconsejo que prestes atención, porque sin duda esta nueva característica, que se presenta a partir de la versión 2.0 del Framework .Net, te cambiará totalmente la forma de ver las cosas y te facilitará la vida a la hora de crear un programa con C#.</p>
<h2>¿Qué es la genericidad?</h2>
<p>Primero lo primero. La <em>genericidad</em> nos permite pasar un tipo genérico (o más), como parámetro a un método, clase, estructura o interfaz. O sea, este nuevo tipo (que llamaremos &lt;T&gt;), viene a sustituir al tipo <em>object</em>, que es usado sobre todo en estructuras de propósito general, como son los arraylist, pilas (stack), colas (queue) y otras que usamos frecuentemente, en las cuales todos los elementos deben ser de un mismo tipo. Por ejemplo, en una lista de números, en la que no queremos que hayan datos de tipo <em>strings</em> o <em>char</em>, solo de tipo <em>int.</em> Ahora se preguntarán <strong>¿Por qué sustituir el tipo Object?</strong></p>
<p>Recuerden que todos los tipos en C# (<em>int</em>, long, <em>string</em>, <em>char</em>, etc) heredan de la clase <em>Object</em>, lo cual es una ventaja para algunas cosas, pero a la vez es un problema a la hora de chequear el tipo de los elementos que se insertan en estas estructuras, ya que no hay una forma rápida y eficaz de verificar que todos los elementos sean del mismo tipo, para controlar esto, tendríamos que <a href="www.carlospes.com/minidiccionario/casting.php" target="_blank">castear</a>* cada vez que queramos obtener un valor de dicha estructura, lo cual puede llevar a errores, por no mencionar que es algo muy pesado, incómodo de programar y hay una gran posibilidad de errores en <a title="tiempo de ejecución" href="http://es.wikipedia.org/wiki/Tiempo_de_ejecución" target="_blank">tiempo de ejecución</a>.</p>
<p>Al usar genericidad también tenemos que tener en cuenta algunos cambios (para bien) en nuestra forma de programar, pero es mejor verlo en la práctica, veamos un ejemplo:  Supongamos que queremos crear una clase con un método o función que nos devuelva el menor de dos valores de un mismo tipo. Utilizando la genericidad, tendríamos algo así:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #FF0000;">class</span> Ejemplo <span style="color: #008080; font-style: italic;">//T es el tipo de dato genérico</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #008080; font-style: italic;">//Método que devuelve un elemento de tipo T que es el mínimo</span>
    <span style="color: #008080; font-style: italic;">//entre el elemento x y el elemento &lt;em&gt;y&lt;/em&gt;</span>
    T Minimo<span style="color: #000000;">&#40;</span>T x, T y<span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
       <span style="color: #0600FF;">if</span><span style="color: #000000;">&#40;</span>x <span style="color: #008000;">&amp;</span>lt<span style="color: #008000;">;</span> y<span style="color: #000000;">&#41;</span>
          <span style="color: #0600FF;">return</span> x<span style="color: #008000;">;</span>
       <span style="color: #0600FF;">else</span>
          <span style="color: #0600FF;">return</span> y<span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Ahora veamos qué pasa cuando invocamos este método:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">//Supongamos que tenemos una clase Figura</span>
Figura f1 <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Figura<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
Figura f2 <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Figura<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
Ejemplo ej <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Ejemplo<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
Figura min <span style="color: #008000;">=</span> ej.<span style="color: #0000FF;">Minimo</span><span style="color: #000000;">&#40;</span>f1, f2<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>Este código ni siquiera se ejecutaría, y dará un error en <a href="http://es.wikipedia.org/wiki/Tiempo_de_compilación" target="_blank">tiempo de compilación</a> en la línea marcada de la clase <strong>Ejemplo&lt;T&gt;</strong> donde T es la clase Figura, ya que en ninguna parte especificamos cuando una instancia de <em>Figura</em> es menor, mayor o igual que otra, sin embargo, para el tipo <em>int </em>esto no supondría ningún problema verdad?</p>
<h2>¿Qué quiere decir esto?</h2>
<p>Cuando usemos genericidad tenemos que ser mucho más cuidadosos y formales cuando programemos, lo cual no es una mala práctica y es bueno ir acostumbrándose. Ahora arreglemos la clase <em>Ejemplo</em> para que el método <em>Minimo(T x, T y)</em> funcione con cualquier tipo de dato en general (que se pueda comparar):</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #FF0000;">class</span> Ejemplo where T<span style="color: #008000;">:</span> IComparable<span style="color: #008000;">;</span>
<span style="color: #000000;">&#123;</span>
    T Minimo<span style="color: #000000;">&#40;</span>T x, T y<span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #FF0000;">int</span> c <span style="color: #008000;">=</span> x.<span style="color: #0000FF;">CompareTo</span><span style="color: #000000;">&#40;</span>y<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #0600FF;">if</span><span style="color: #000000;">&#40;</span>c<span style="color: #008000;">&amp;</span>lt<span style="color: #008000;">;</span><span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span>
            <span style="color: #0600FF;">return</span> x<span style="color: #008000;">;</span>
        <span style="color: #0600FF;">else</span>
            <span style="color: #0600FF;">return</span> y<span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Ahora ya especificamos que T es un tipo que debe implementar la interfaz IComparable&lt;T&gt;. En otras palabras, obligamos a que los elementos de tipo T se pueden comparar entre ellos, ya que en otro caso, hallar el mínimo pierde el sentido. En estos casos, se utiliza la palabra reservada <em>where:</em> y a continuación todas las restricciones que debe cumplir T, separadas por coma.</p>
<p>Entonces usamos el método <em>CompareTo</em> que debe implementar toda clase T que sea <em>IComparable</em> para saber cuál es el menor elemento. Este método deberá devolver <strong>0 si x=y, 1 si x&gt;y,-1 si x&lt;y</strong>. Por tanto, el resultado de ejecutar <em>Minimo</em>, depende completamente de cómo implementemos el método <em>CompareTo()</em>.  Por ejemplo, si tenemos la clase Figura:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #FF0000;">class</span> Figura<span style="color: #008000;">:</span> IComparable
<span style="color: #000000;">&#123;</span>
    <span style="color: #008080; font-style: italic;">//Supongamos que tenemos estos métodos implementados</span>
    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">long</span> Area<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">long</span> Perimetro<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">//Ahora implementamos el método &lt;em&gt;CompareTo&lt;/em&gt;</span>
    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> CompareTo<span style="color: #000000;">&#40;</span>Figura f<span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">if</span><span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Area</span><span style="color: #008000;">&amp;</span>gt<span style="color: #008000;">;</span>f.<span style="color: #0000FF;">Area</span><span style="color: #000000;">&#41;</span>
            <span style="color: #0600FF;">return</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span>
        <span style="color: #0600FF;">else</span> <span style="color: #0600FF;">if</span><span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Area</span></pre></div></div>

<p>En este caso, decidimos que una Figura es mayor que otra, en función del área, pero podemos definir que se comparen por el diámetro, por el perímetro, etc. Noten que aquí si podemos usar los operadores binarios dentro del CompareTo, ya que en este caso comparamos implícitamente elementos de tipo long, que son IComparables por defecto.  Ya vas notando algunas ventajas de usar genericidad?</p>
<p>Ahora en un mismo método Mínimo, podemos devolver el elemento menor de cualquier tipo de dato que se pueda comparar, noten que este método nos servirá para Int, String, Long, Figuras, Personas y toda clase o tipo que implemente la interfaz IComparable.</p>
<p>Les dejo dos implementación de la clase <strong>Queue&lt;T&gt;</strong>, que es una cola con algunos métodos genéricos. En una de las implementaciones uso arrays, y en la otra colas enlazables. No lo he probado muy bien, pero funcionaba hace dos años cuando la implementé, jeje.</p>
<p>Veremos algunas otras cosas que podemos hacer con la genericidad en la segunda entrega de este tutorial, la semana próxima. Cualquier duda en los comentarios.</p>
<p>Descarga aquí el archivo en .zip:  <a href="http://www.puntopeek.com/wp-content/uploads/2010/06/cola.zip">Cola en C#</a></p>


<p>Entradas relacionadas<li><a href='http://www.puntopeek.com/tutoriales-c/herencia-programacion-en-c/' rel='bookmark' title='Permanent Link: Herencia en C#. Concepto y ejemplos'>Herencia en C#. Concepto y ejemplos</a></li>
<li><a href='http://www.puntopeek.com/programacion/linq-c-sharp-ejemplos-caracteristicas/' rel='bookmark' title='Permanent Link: LINQ con C#. Ejemplos'>LINQ con C#. Ejemplos</a></li>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.puntopeek.com/programacion/genericidad-ejemplos-c-sharp/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Eventos en Windows Form</title>
		<link>http://www.puntopeek.com/tutoriales-c/eventos-en-windows-form/</link>
		<comments>http://www.puntopeek.com/tutoriales-c/eventos-en-windows-form/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 06:20:32 +0000</pubDate>
		<dc:creator>Tomy</dc:creator>
				<category><![CDATA[Tutoriales C#]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[Windows Form]]></category>

		<guid isPermaLink="false">http://www.puntopeek.com/?p=264</guid>
		<description><![CDATA[En estos días no he tenido mucho tiempo de publicar nada porque he estado ocupado en la universidad con muchas tareas y proyectos, pero hoy les dejaré un programa muy sencillo, y les hablaré un poco sobre los eventos en Windows &#8230; <a href="http://www.puntopeek.com/tutoriales-c/eventos-en-windows-form/">seguir leyendo &#187;</a></p>


No hay entradas relacionadas.]]></description>
			<content:encoded><![CDATA[<p>En estos días no he tenido mucho tiempo de publicar nada porque he estado ocupado en la universidad con muchas tareas y proyectos, pero hoy les dejaré un programa muy sencillo, y les hablaré un poco sobre los eventos en Windows Form, que son una importante herramienta para lograr una buena interacción con el usuario que use nuestro programa. Hay muchos eventos (MouseDown, MouseUp, KeyPress, etc) en C#, incluso podemos crear nuestros propios eventos.</p>
<p>Cuando creamos un elemento en Windows Form, para seleccionar cual evento queremos disparar y como lo queremos programar, solo hay que seleccionar un objeto (boton, formulario, label) que hayamos creado previamente, y en el menu <strong>Propiedades</strong>, en la parte superior seleccionamos <strong>Events</strong>, ahí salen todos los eventos asociados al objeto creado. Solo tenemos que hacer doble click, entonces ya podremos programar lo que queremos que se haga cuando se dispare el evento.</p>
<p>Si se fijan bien, al poner el mouse arriba de un Evento, en la parte inferior del panel de<strong> propiedades</strong> aparece una pequeña descripción sobre el evento.</p>
<p>Aquí les dejo un programita que hice ya hace algunos años, y les servirá de ejemplo para que vean el manejo del evento MouseMove().</p>
<p>Pueden descargar el código fuente aquí:<br />
<a href="http://www.puntopeek.com/wp-content/uploads/2009/11/Broma.zip">http://www.puntopeek.com/wp-content/uploads/2009/11/Broma.zip</a></p>
<p>Lo unico que hay que saber para hacer un programa de este tipo, bien sencillo, es programar el evento MouseMove() y saber que MouseMove() se activa cuando el mouse pasa por encima del objeto asociado este evento. El programa lo que hace es mover el botón de lugar cuando tratas de posicionar el mouse encima del botón, esto se hace calculando nuevas coordenadas.</p>
<p><a href="http://www.puntopeek.com/wp-content/uploads/2009/11/ejemplo.png"><img title="ejemplo" src="http://www.puntopeek.com/wp-content/uploads/2009/11/ejemplo.png" alt="ejemplo Eventos en Windows Form" width="420" height="287" /></a></p>
<p>Bueno, los dejo con el ejemplo, tengo que seguir trabajando en mi proyecto de Estructura de Datos (Un Módulo de Respuesta Automatizada xD). Practiquen un poco y lean sobre el Grafics en Windows Forms, porque a partir del lunes empezaré a escribir pequeño tutorial sobre como programar algun juego sencillo en C#, y estoy pensando en el Sudoku. Cualquier duda en los comentarios.</p>


<p>No hay entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://www.puntopeek.com/tutoriales-c/eventos-en-windows-form/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Herencia en C#. Concepto y ejemplos</title>
		<link>http://www.puntopeek.com/tutoriales-c/herencia-programacion-en-c/</link>
		<comments>http://www.puntopeek.com/tutoriales-c/herencia-programacion-en-c/#comments</comments>
		<pubDate>Sat, 12 Sep 2009 22:49:54 +0000</pubDate>
		<dc:creator>Tomy</dc:creator>
				<category><![CDATA[Tutoriales C#]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[herencia]]></category>
		<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://www.puntopeek.com/?p=254</guid>
		<description><![CDATA[Como todo lenguaje de programación actual, C# es un lenguaje orientado a objetos y soporta todas las características propias del paradigma de programación orientada a objetos: encapsulación, herencia y polimorfismo.
En este post trataré de explicar de la forma más sencilla &#8230; <a href="http://www.puntopeek.com/tutoriales-c/herencia-programacion-en-c/">seguir leyendo &#187;</a></p>


Entradas relacionadas<li><a href='http://www.puntopeek.com/tutoriales-c/clases-en-c-declarar-un-constructor/' rel='bookmark' title='Permanent Link: Clases en C#. Declarar un constructor'>Clases en C#. Declarar un constructor</a></li>
<li><a href='http://www.puntopeek.com/programacion/genericidad-ejemplos-c-sharp/' rel='bookmark' title='Permanent Link: Genericidad en C#. Ejemplos'>Genericidad en C#. Ejemplos</a></li>
<li><a href='http://www.puntopeek.com/programacion/linq-c-sharp-ejemplos-caracteristicas/' rel='bookmark' title='Permanent Link: LINQ con C#. Ejemplos'>LINQ con C#. Ejemplos</a></li>
]]></description>
			<content:encoded><![CDATA[<p>Como todo lenguaje de programación actual, C# es un lenguaje orientado a objetos y soporta todas las características propias del paradigma de programación orientada a objetos: <strong>encapsulación, herencia y polimorfismo.</strong></p>
<p>En este post trataré de explicar de la forma más sencilla posible, lo que es la herencia en programación, y pondré algunos ejemplos al final para ver si se llevan la idea, aunque seguro se quedan con algunas dudas, ya que es un concepto fácil de entender, pero difícil de aplicar en programación&#8230; después hablaremos entonces de lo que es la encapsulación y el polimorfismo<span id="more-254"></span></p>
<p>Por definición, la herencia no es más que la capacidad de un objeto de heredar las características de otro. Bueno, en programación, la herencia es la capacidad de una clase de heredar los métodos, las variables y las propiedades de otra (los constructores no se heredan). Esto permite ahorrar código, ya que varias funcionalidades no tendríamos que implementarlas nuevamente.</p>
<p>Una clase que herede de otra, puede usar los métodos, las propiedades o las variables de la clase padre. También se puede redefinir o modificar los métodos y propiedades, usando algunas palabras reservadas para esto, creando así un nuevo comportamiento del objeto. Una condición necesaria para que una clase herede de otra, es que la clase hija (la que hereda), debe poder usarse donde se use la clase padre (de la cual va a heredar). Si hay al menos un caso donde se puede usar la clase padre, y no se puede usar la clase hija, la herencia no tiene sentido.</p>
<p>En C#, una clase solo puede heredar de otra (por algunas razones difíciles de explicar). O sea, una clase no puede heredar de varias clases a la vez. Para que una clase herede de otra nada más hay que ponerle &#8216;<strong>:</strong>&#8216; después de su declaración, y seguido poner el nombre de la clase de la que se quiere heredar.</p>
<p>Ejemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #FF0000;">class</span> Circulo<span style="color: #008000;">:</span> Figura
<span style="color: #000000;">&#123;</span>
    <span style="color: #008080; font-style: italic;">// Implementación de la clase</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Si una clase hija tiene un <a href="http://www.puntopeek.com/tutoriales-c/clases-en-c-declarar-un-constructor/" target="_blank">constructor</a> que recibe los mismos parámetros que un constructor de la clase padre, y este constructor cumple las mismas funciones, que en la clase padre, el de la clase padre puede ser llamado desde la clase hija poniendo después de la declaración del constructor en la clase hija : y después la palabra reservada base. Dentro de los paréntesis van los parámetros del constructor base, (también veremos un ejemplo).</p>
<p>También es importante saber que si una clase hereda de otra, que a su vez hereda de otra, esta clase hereda también de la clase más arriba.</p>
<p>Por ejemplo, si un cuadrilátero es una figura y un paralelogramo es un cuadrilátero, entonces un paralelogramo es una figura&#8230;</p>
<p>Para que una clase padre permita que uno de sus métodos sea redefinido por sus clases herederas (las que heredan de ella) este método debe ser declarado usando la palabra reservada <strong>virtual</strong>, y cuando la clase hija vaya a redefinirlo, debe declararlo usando la palabra reservada <strong>override</strong>.</p>
<p>Ejemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #008000;">&lt;</span>strong<span style="color: #008000;">&gt;</span><span style="color: #0600FF;">virtual</span><span style="color: #008000;">&lt;/</span>strong<span style="color: #008000;">&gt;</span> <span style="color: #0600FF;">void</span> Método<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #008080; font-style: italic;">//declaración del método en la clase Padre</span>
<span style="color: #000000;">&#123;</span>
<span style="color: #008080; font-style: italic;">//aquí va el codigo</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">override</span> <span style="color: #0600FF;">void</span> Método<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #008080; font-style: italic;">//declaración del método en la clase Hijo</span>
<span style="color: #000000;">&#123;</span>
<span style="color: #008080; font-style: italic;">//nuevas instrucciones</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Si una clase hijo quiere redefinir un método de una clase padre, y este no fue declarado <strong>virtual</strong> en la clase padre, entonces hay que poner la palabra reservada <strong>new</strong> en la declaración del método.</p>
<p>Ejemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> Método<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #008080; font-style: italic;">//declaración del método en la clase Padre</span>
<span style="color: #000000;">&#123;</span>
   <span style="color: #008080; font-style: italic;">//aquí va el codigo</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #0600FF;">public</span> <span style="color: #008000;">new</span> <span style="color: #0600FF;">void</span> Método<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #008080; font-style: italic;">//declaración del método en la clase Hijo</span>
<span style="color: #000000;">&#123;</span>
   <span style="color: #008080; font-style: italic;">//nuevas instrucciones</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p><strong>Ejemplo de herencia:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> Hijo<span style="color: #008000;">:</span>Padre
<span style="color: #000000;">&#123;</span>
&nbsp;
<span style="color: #008080; font-style: italic;">//la clase Hijo hereda de la clase Padre</span>
<span style="color: #0600FF;">public</span> Hijo<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> n<span style="color: #000000;">&#41;</span><span style="color: #008000;">:</span><span style="color: #0600FF;">base</span><span style="color: #000000;">&#40;</span>n<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#123;</span><span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>El constructor de la clase Hijo que recibe como parámetros un entero llama al constructor de la clase Padre que recibe un entero pasándoselo como parámetro.</p>
<p>Ahora veremos un ejemplo real donde se vea la importancia de este importante mecanismo. Imaginen, que queremos tener algunas figuras geométricas, poder calcular el area, perimetro, moverlas en un plano, etc. Pero nos damos cuenta enseguida, que todas las figuras tienen area y perímetro, solo que se calculan de diferentes formas. Todas se pueden ocultar, mostrar y mover de igual forma, no? Veamos ya el código, para que sigan esta idea:</p>
<p>Antes de pasar al código, hay que definir que una jerarquía de clases es un grupo de clases, que heredan unas de otras, donde existe una clase base de la cual heredan todos los integrantes de la jerarquía, en este caso, la clase base es la clase figura.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">//Declaramos la clase padre, de la que todas las figuras heredarán</span>
<span style="color: #008080; font-style: italic;">//Es abstracta porque tendrá algunos metodos abstractos</span>
&nbsp;
<span style="color: #0600FF;">public</span> abstract <span style="color: #FF0000;">class</span> Figura
<span style="color: #000000;">&#123;</span>
<span style="color: #008080; font-style: italic;">//Usamos &lt;strong&gt;protected,&lt;/strong&gt; para que solo tengan acceso</span>
<span style="color: #008080; font-style: italic;">//a estas variables, las clases que heredan de ella</span>
<span style="color: #0600FF;">protected</span> <span style="color: #FF0000;">int</span> x,y<span style="color: #008000;">;</span>
<span style="color: #0600FF;">protected</span> Control control<span style="color: #008000;">;</span>
<span style="color: #0600FF;">protected</span> Pen myPen<span style="color: #008000;">;</span>
<span style="color: #0600FF;">protected</span> <span style="color: #FF0000;">bool</span> visible<span style="color: #008000;">;</span>
&nbsp;
<span style="color: #008080; font-style: italic;">//Un constructor por defecto para todas las figuras</span>
<span style="color: #0600FF;">public</span> Figura<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> x, <span style="color: #FF0000;">int</span> y, Color color, Control control<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
<span style="color: #008080; font-style: italic;">//Validar parametros</span>
<span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">x</span> <span style="color: #008000;">=</span> x<span style="color: #008000;">;</span>
<span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">y</span> <span style="color: #008000;">=</span> y<span style="color: #008000;">;</span>
<span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">control</span> <span style="color: #008000;">=</span> control<span style="color: #008000;">;</span>
myPen <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Pen<span style="color: #000000;">&#40;</span>color,<span style="color: #FF0000;">4</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #000000;">&#125;</span>
<span style="color: #0600FF;">public</span> abstract <span style="color: #0600FF;">void</span> Muestra<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">public</span> abstract <span style="color: #FF0000;">int</span> Area<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">virtual</span> <span style="color: #0600FF;">void</span> Oculta<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
Color temp <span style="color: #008000;">=</span> myPen.<span style="color: #0000FF;">Color</span><span style="color: #008000;">;</span>
myPen.<span style="color: #0000FF;">Color</span> <span style="color: #008000;">=</span> control.<span style="color: #0000FF;">BackColor</span><span style="color: #008000;">;</span>
Muestra<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
myPen.<span style="color: #0000FF;">Color</span> <span style="color: #008000;">=</span> temp<span style="color: #008000;">;</span>
visible <span style="color: #008000;">=</span> false<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">virtual</span> <span style="color: #0600FF;">void</span> Traslada<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> plusX, <span style="color: #FF0000;">int</span> plusY<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
   <span style="color: #0600FF;">if</span><span style="color: #000000;">&#40;</span>visible<span style="color: #000000;">&#41;</span>
   <span style="color: #000000;">&#123;</span>
      Oculta<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      x <span style="color: #008000;">+=</span> plusX<span style="color: #008000;">;</span>
      y <span style="color: #008000;">+=</span> plusY<span style="color: #008000;">;</span>
      Muestra<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
   <span style="color: #000000;">&#125;</span>
   <span style="color: #0600FF;">else</span>
   <span style="color: #000000;">&#123;</span>
      x <span style="color: #008000;">+=</span> plusX<span style="color: #008000;">;</span>
      y <span style="color: #008000;">+=</span> plusY<span style="color: #008000;">;</span>
   <span style="color: #000000;">&#125;</span></pre></div></div>

<p>Ahora veremos el código de otras dos figuras en concreto que heredarán de la clase figura, un circulo y un rectángulo.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> Circulo<span style="color: #008000;">:</span>Figura
<span style="color: #000000;">&#123;</span>
<span style="color: #008080; font-style: italic;">//Vemos que en esta clase solo hay que declarar</span>
<span style="color: #008080; font-style: italic;">//una variable</span>
<span style="color: #0600FF;">protected</span> <span style="color: #FF0000;">int</span> radio<span style="color: #008000;">;</span>
<span style="color: #008080; font-style: italic;">//Este constructor tendrá todos los parámetros</span>
<span style="color: #008080; font-style: italic;">//por defecto y un radio porque es un circulo</span>
<span style="color: #0600FF;">public</span> Circulo<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> x, <span style="color: #FF0000;">int</span> y, Color miColor, Control miControl,
 <span style="color: #FF0000;">int</span> radio<span style="color: #000000;">&#41;</span>
<span style="color: #008000;">:</span><span style="color: #0600FF;">base</span><span style="color: #000000;">&#40;</span>x,y,miColor,miControl<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
   <span style="color: #008080; font-style: italic;">//Validacion</span>
   <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">radio</span> <span style="color: #008000;">=</span> radio<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span>
<span style="color: #008080; font-style: italic;">//Ahora hay que programar como se mostrará la figura</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">override</span> <span style="color: #0600FF;">void</span> Muestra<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
   Graphics g <span style="color: #008000;">=</span> control.<span style="color: #0000FF;">CreateGraphics</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
   g.<span style="color: #0000FF;">DrawEllipse</span><span style="color: #000000;">&#40;</span>myPen,x<span style="color: #008000;">-</span>radio,y<span style="color: #008000;">-</span>radio,radio<span style="color: #008000;">*</span><span style="color: #FF0000;">2</span>,radio<span style="color: #008000;">*</span><span style="color: #FF0000;">2</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
   visible <span style="color: #008000;">=</span> true<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #008080; font-style: italic;">//Decimos como se calcula el area en este caso</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">override</span> <span style="color: #FF0000;">int</span> Area<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
   <span style="color: #0600FF;">return</span> Math.<span style="color: #0000FF;">PI</span> <span style="color: #008000;">*</span> Math.<span style="color: #0000FF;">PI</span> <span style="color: #008000;">*</span> radio<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #008080; font-style: italic;">//Le podemos añadir otro método independiente</span>
<span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> Perimetro<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">return</span> <span style="color: #FF0000;">2</span> <span style="color: #008000;">*</span> Math.<span style="color: #0000FF;">PI</span> <span style="color: #008000;">*</span> radio<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #008080; font-style: italic;">//Esta clase también heredará de figura</span>
<span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> Rectangulo<span style="color: #008000;">:</span>Figura
<span style="color: #000000;">&#123;</span>
   <span style="color: #0600FF;">protected</span> <span style="color: #FF0000;">int</span> ancho,alto<span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF;">public</span> Rectangulo<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> x, <span style="color: #FF0000;">int</span> y, Color miColor, Control miControl,
<span style="color: #FF0000;">int</span> ancho, <span style="color: #FF0000;">int</span> alto<span style="color: #000000;">&#41;</span>
<span style="color: #008000;">:</span><span style="color: #0600FF;">base</span><span style="color: #000000;">&#40;</span>x,y,miColor,miControl<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
   <span style="color: #008080; font-style: italic;">//Validar</span>
   <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">ancho</span> <span style="color: #008000;">=</span> ancho<span style="color: #008000;">;</span>
   <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">alto</span> <span style="color: #008000;">=</span> alto<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span>
<span style="color: #008080; font-style: italic;">//Redefinimos como mostrar la figura</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">override</span> <span style="color: #0600FF;">void</span> Muestra<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
   Graphics g <span style="color: #008000;">=</span> control.<span style="color: #0000FF;">CreateGraphics</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
   g.<span style="color: #0000FF;">DrawRectangle</span><span style="color: #000000;">&#40;</span>myPen,x,y,ancho,alto<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
   visible <span style="color: #008000;">=</span> true<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span>
<span style="color: #008080; font-style: italic;">//Redefinimos como calcular el area</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">override</span> <span style="color: #FF0000;">int</span> Area<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
   <span style="color: #0600FF;">return</span> alto <span style="color: #008000;">*</span> ancho<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Bueno, hasta aquí este pequeño tutorial sobre herencia en C#, próximamente estaremos hablando sobre polimorfismo, y después de encapsulación. Cualquier duda en los comentarios. Hasta la próxima</p>


<p>Entradas relacionadas<li><a href='http://www.puntopeek.com/tutoriales-c/clases-en-c-declarar-un-constructor/' rel='bookmark' title='Permanent Link: Clases en C#. Declarar un constructor'>Clases en C#. Declarar un constructor</a></li>
<li><a href='http://www.puntopeek.com/programacion/genericidad-ejemplos-c-sharp/' rel='bookmark' title='Permanent Link: Genericidad en C#. Ejemplos'>Genericidad en C#. Ejemplos</a></li>
<li><a href='http://www.puntopeek.com/programacion/linq-c-sharp-ejemplos-caracteristicas/' rel='bookmark' title='Permanent Link: LINQ con C#. Ejemplos'>LINQ con C#. Ejemplos</a></li>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.puntopeek.com/tutoriales-c/herencia-programacion-en-c/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Clases en C#. Declarar un constructor</title>
		<link>http://www.puntopeek.com/tutoriales-c/clases-en-c-declarar-un-constructor/</link>
		<comments>http://www.puntopeek.com/tutoriales-c/clases-en-c-declarar-un-constructor/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 08:42:46 +0000</pubDate>
		<dc:creator>Tomy</dc:creator>
				<category><![CDATA[Tutoriales C#]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[estructuras C#]]></category>

		<guid isPermaLink="false">http://www.puntopeek.com/?p=248</guid>
		<description><![CDATA[Un constructor, es un miembro de una clase, es a través del constructor, que se crea una instancia de una clase, el nombre de todo constructor de una clase, tiene que ser el mismo nombre que la clase a la &#8230; <a href="http://www.puntopeek.com/tutoriales-c/clases-en-c-declarar-un-constructor/">seguir leyendo &#187;</a></p>


Entradas relacionadas<li><a href='http://www.puntopeek.com/tutoriales-c/herencia-programacion-en-c/' rel='bookmark' title='Permanent Link: Herencia en C#. Concepto y ejemplos'>Herencia en C#. Concepto y ejemplos</a></li>
]]></description>
			<content:encoded><![CDATA[<p>Un constructor, es un miembro de una clase, es a través del constructor, que se crea una instancia de una clase, el nombre de todo constructor de una clase, tiene que ser el mismo nombre que la clase a la cual pertenece, cuando en una clase no se declara un constructor en .net, a esta se le asigna, el constructor por defecto, que no recibe parámetros, y no hace nada. <span id="more-248"></span></p>
<p>En un constructor, es donde se construye un objeto del tipo de la clase, es donde se inicializan las variables, se verifica que sus valores sean admisibles, y se le asignan valores a estas. Una clase puede contener varios constructores, estos se deben diferenciar en la cantidad de<br />
parámetros, o en el tipo de los parámetros que reciben. Los constructores no se heredan, pero pueden ser llamados desde clases herederas usando la palabra reservada base y pasándole los parámetros que recibe. Esto lo veremos un poco más adelante cuando hablemos de herencia y polimorfismo, que son las bases de la programación orientada a objetos (POO).</p>
<p>Para declarar un constructor de una clase, se usa la siguiente sintaxis:</p>
<p>&lt;modificador de visibilidad&gt; &lt;nombre de la clase a la que pertenece&gt; (parámetros){instrucciones}</p>
<p>Ejemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> <span style="color: #0600FF;">Auto</span>
<span style="color: #000000;">&#123;</span>
<span style="color: #FF0000;">string</span> marca<span style="color: #008000;">;</span>
<span style="color: #FF0000;">int</span> modelo<span style="color: #008000;">;</span>
Color color<span style="color: #008000;">;</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">Auto</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#123;</span><span style="color: #000000;">&#125;</span> <span style="color: #008080; font-style: italic;">//constructor por defecto</span>
&nbsp;
<span style="color: #008080; font-style: italic;">//Otro constructor</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">Auto</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> marca<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
<span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">marca</span><span style="color: #008000;">=</span> marca<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span>
<span style="color: #008080; font-style: italic;">//Otro constructor al que le pasamos todos los datos</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">Auto</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> marca, <span style="color: #FF0000;">int</span> modelo, Color color<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
<span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">modelo</span> <span style="color: #008000;">=</span> modelo<span style="color: #008000;">;</span>
<span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">color</span> <span style="color: #008000;">=</span> color
<span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">marca</span><span style="color: #008000;">=</span> marca<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Nótese que los constructores se diferencian en la cantidad de parámetros o en el tipo de estos. Pero el constructor es uno solo, pero con varias sobrecargas, de modo que puedes elegir después como quieres crear un auto, dependiendo de los datos que tengas o no&#8230; además puedes crear  propiedades y métodos propios de una clase, pero eso lo veremos en el proximo post. Ahora  para crear un nuevo auto, o sea, una instancia de la clase Auto, podemos hacerlo de tres formas:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">Auto</span> miAuto <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #0600FF;">Auto</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">Auto</span> ford <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #0600FF;">Auto</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Ford Explorer&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">Auto</span> audi <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #0600FF;">Auto</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Audi&quot;</span>, <span style="color: #FF0000;">404</span>, Color.<span style="color: #0000FF;">Red</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>Por ahora practiquen, ya veremos un poco más adelante todo lo que podemos y se nos permite hacer detro de las clases. Si tienen duda, comentarios&#8230;</p>


<p>Entradas relacionadas<li><a href='http://www.puntopeek.com/tutoriales-c/herencia-programacion-en-c/' rel='bookmark' title='Permanent Link: Herencia en C#. Concepto y ejemplos'>Herencia en C#. Concepto y ejemplos</a></li>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.puntopeek.com/tutoriales-c/clases-en-c-declarar-un-constructor/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 1.594 seconds -->

