<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Lluís Franco on Geeks.ms : Frikadas</title><link>http://geeks.ms/blogs/lfranco/archive/tags/Frikadas/default.aspx</link><description>Etiquetas: Frikadas</description><dc:language /><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Sharpwhere over the rainbow…</title><link>http://geeks.ms/blogs/lfranco/archive/2011/02/16/sharpwhere-over-the-rainbow.aspx</link><pubDate>Wed, 16 Feb 2011 16:55:37 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:189079</guid><dc:creator>Lluis Franco</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lfranco/rsscomments.aspx?PostID=189079</wfw:commentRss><comments>http://geeks.ms/blogs/lfranco/archive/2011/02/16/sharpwhere-over-the-rainbow.aspx#comments</comments><description>&lt;p&gt;…skies are blue :-)&lt;/p&gt;  &lt;p&gt;Si, se que el título del post está ‘pillado’ con pinzas, pero de lo que trata este post es de “cómo utilizar una brocha para pintar el interior de un control con varios niveles de degradado“, o sea “pintar un control Label con los colores del arco iris” :-D&lt;/p&gt;  &lt;p&gt;Que? Ya habéis terminado de reíros?&lt;/p&gt;  &lt;p&gt;Pues ahora os cuento el porqué se me ha ocurrido todo esto: Resulta que un proyecto en el que estoy trabajando, se muestran unas barras de progreso de color azul que indican el % de realización de unos presupuestos. Después de mirarlas un rato y ver lo ‘sosas’ que quedaban, he pensado que le podía dar un toque de color, aprovechando que pronto va a ser el &lt;a href="http://es.wikipedia.org/wiki/D%C3%ADa_del_Orgullo_Friki"&gt;día del orgullo friki&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lfranco/mojo1_5F00_1ED74EDD.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="mojo1" border="0" alt="mojo1" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lfranco/mojo1_5F00_thumb_5F00_3E09CFE3.jpg" width="640" height="451" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;A que es bonito, verdad? :-)&lt;/p&gt;  &lt;p&gt;Vale, pues hacer esto con WPF es trivial mediante &lt;a href="http://msdn.microsoft.com/en-us/library/ms754083.aspx"&gt;GradientStops&lt;/a&gt;, pero, oooohhhh… este proyecto es WinForms. Pero tranquilos, el viejo y bueno namespace ‘System.Drawing.Drawing2D’ dispone de alguna sorpresa, como la clase &lt;a href="http://msdn.microsoft.com/en-us/library/system.drawing.drawing2d.colorblend.aspx"&gt;ColorBlend&lt;/a&gt;, que permite definir un array de colores y posiciones para realizar degradados de colores. Anda mira, me ha salido un pareado! :-D&lt;/p&gt;  &lt;p&gt;Total, que partiendo del evento Paint de cualquier control (en el que se obtienen como argumentos el contexto gráfico y el rectángulo del área a pintar), he creado una pequeña clase que permite especificar los distintos colores de degradado para el mismo:&lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; MultiGradientRectangle&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;{&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Graphics Graphics { get; set; }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Rectangle Rectangle { get; set; }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; List&amp;lt;Color&amp;gt; ColorPoints { get; set; }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; PercentCompleted { get; set; }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; MultiGradientRectangle(Graphics graphics, Rectangle rectangle)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        Graphics = graphics;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        Rectangle = rectangle;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        ColorPoints = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;Color&amp;gt;();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; DrawMultiGradientRectangle()&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (PercentCompleted == 0) &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (ColorPoints.Count == 0) &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        List&amp;lt;&lt;span style="color:#0000ff;"&gt;float&lt;/span&gt;&amp;gt; myPositions = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:#0000ff;"&gt;float&lt;/span&gt;&amp;gt;();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;float&lt;/span&gt; colordistance = 1f / (ColorPoints.Count - 1f);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; ColorPoints.Count; i++)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;            myPositions.Add(colordistance * i);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        ColorBlend blend = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ColorBlend();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        blend.Colors = ColorPoints.ToArray();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        blend.Positions = myPositions.ToArray();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (LinearGradientBrush brush = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; LinearGradientBrush(&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;            Rectangle, Color.Black, Color.White, 0, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;))&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;            brush.InterpolationColors = blend;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;            Graphics.FillRectangle(brush, Rectangle);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#008000;"&gt;//algo falta aquí... :-)&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Ahora creamos un formulario con un control pictureBox (en realidad puede ser cualquiera) y nos suscribimos a su evento Paint.&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Form1()&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;{&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    InitializeComponent();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    pictureBox1.Paint += pictureBox1_Paint;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;}&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; pictureBox1_Paint(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, PaintEventArgs e)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;{&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    drawMultiGradient(e.Graphics, e.ClipRectangle, 50);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;}&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; drawMultiGradient(Graphics g, Rectangle rect, &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; percent)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;{&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    MultiGradientRectangle mgrect = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; MultiGradientRectangle(g, rect);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    mgrect.PercentCompleted = percent;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    mgrect.ColorPoints.Add(Color.Red);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    mgrect.ColorPoints.Add(Color.Orange);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    mgrect.ColorPoints.Add(Color.Yellow);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    mgrect.ColorPoints.Add(Color.LightGreen);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    mgrect.ColorPoints.Add(Color.Green);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;    mgrect.DrawMultiGradientRectangle();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Así, podemos crear tantos puntos intermedios como queramos, sólo tenemos la limitación del buen gusto.&lt;/p&gt;

&lt;p&gt;Sin embargo falta algo, verdad? Efectivamente, en la captura de pantalla puede verse perfectamente que las barras de progreso se ‘rellenan’ sólo hasta el porcentaje alcanzado. Si es un 0% no hay degradado, si es un 50% sólo hasta la mitad, y así…&lt;/p&gt;

&lt;p&gt;Como veis, falta un fragmento de código en el método DrawMultiGradientRectangle. Os dejo como ejercicio mostrar únicamente el relleno hasta el % especificado mediante la propiedad ‘PercentCompleted’. A ver que solución es la más chula ;-)&lt;/p&gt;

&lt;p&gt;Un saludo desde Andorra, nos vemos!&lt;/p&gt;

&lt;p&gt;PD – Podéis decir lo que queráis acerca del diseño, se admiten todo tipo de críticas (otra cosa es que os haga caso :-P)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=189079" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Frikadas/default.aspx">Frikadas</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Tip/default.aspx">Tip</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/2010/default.aspx">2010</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Codigo/default.aspx">Codigo</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/4.0/default.aspx">4.0</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/WinForms/default.aspx">WinForms</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Paint/default.aspx">Paint</category></item><item><title>[Debate] Nombre de Namespaces en métodos extensores ¿Y tu que opinas?</title><link>http://geeks.ms/blogs/lfranco/archive/2011/01/13/debate-nombre-de-namespaces-en-m-233-todos-extensores-191-y-tu-que-opinas.aspx</link><pubDate>Thu, 13 Jan 2011 12:19:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:187244</guid><dc:creator>Lluis Franco</dc:creator><slash:comments>19</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lfranco/rsscomments.aspx?PostID=187244</wfw:commentRss><comments>http://geeks.ms/blogs/lfranco/archive/2011/01/13/debate-nombre-de-namespaces-en-m-233-todos-extensores-191-y-tu-que-opinas.aspx#comments</comments><description>&lt;p&gt;Ayer, a ra&amp;iacute;z de &lt;a href="http://geeks.ms/blogs/jtorrecilla/archive/2011/01/11/tip-rapido-m-233-todo-extensor.aspx"&gt;un post&lt;/a&gt; del colega Javier Torrecilla sobre m&amp;eacute;todos extensores, unos cuantos de nosotros entre los que estaban el propio Javier y Jorge Serrano nos enzarzamos en una discusi&amp;oacute;n en twitter acerca del mejor modo de declarar nuestros m&amp;eacute;todos extensores.&lt;/p&gt;
&lt;p&gt;Pongamos un ejemplo: Supongamos que queremos crear un m&amp;eacute;todo extensor para comprobar si un valor est&amp;aacute; entre dos valores (el cl&amp;aacute;sico between de toda la vida).&lt;/p&gt;
&lt;p&gt;Agrego una clase llamada ExtensionMethods a mi proyecto, o a otro proyecto mi soluci&amp;oacute;n y agrego este c&amp;oacute;digo:&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div id="codeSnippet" style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; CustomExtensions&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; ExtensionMethods&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; Between&amp;lt;T&amp;gt;(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; T @&lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;, T min, T max) &lt;span style="color:#0000ff;"&gt;where&lt;/span&gt; T : IComparable&amp;lt;T&amp;gt;&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; @&lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;.CompareTo(min) &amp;gt;= 0 &amp;amp;&amp;amp; @&lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;.CompareTo(max) &amp;lt;= 0;&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Suponiendo que estamos en un proyecto de tipo WinForms, si queremos utilizar este m&amp;eacute;todo extensor sobre un valor de tipo int basta con ir a cualquier formulario y llamar al m&amp;eacute;todo between sobre un valor de este tipo. Por ejemplo:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lfranco/EM1_5F00_1AD32F93.png"&gt;&lt;img height="195" width="451" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lfranco/EM1_5F00_thumb_5F00_1196F452.png" alt="EM1" border="0" title="EM1" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Oops! Que pasa? Por que no aparece el m&amp;eacute;todo extensor? Bueno, como ya os habr&amp;eacute;is dado cuenta el m&amp;eacute;todo extensor est&amp;aacute; declarado dentro de un namespce llamado &amp;lsquo;CustomExtensions&amp;rsquo;, que es distinto al namespace del formulario en el que lo estoy probando, con lo que no podemos usarlo directamente si previamente no hacemos un using:&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div id="codeSnippet" style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; CustomExtensions;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Vale, ahora si que aparece:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lfranco/EM2_5F00_1DB86E79.png"&gt;&lt;img height="216" width="526" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lfranco/EM2_5F00_thumb_5F00_2E506967.png" alt="EM2" border="0" title="EM2" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Bien. Esto en si no es nada del otro mundo, pero la cuesti&amp;oacute;n es que si deseamos evitar declarar el using (ten&amp;eacute;is que pensar que este m&amp;eacute;todo extensor lo pod&amp;eacute;is reutilizar en 1000 proyectos distintos), no tenemos otra opci&amp;oacute;n que:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Declarar el m&amp;eacute;todo extensor en un namespace que se llame igual que el namespace en el que se va a usar.&lt;/li&gt;
&lt;li&gt;Declarar el m&amp;eacute;todo extensor en un namespace que se llame igual que el namespace del tipo que estamos extendiendo.&lt;/li&gt;
&lt;li&gt;Pasar de todo y llamarlo al namespace como queramos, y que a la hora de usarlo debamos usar un using para agregarlo.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Particularmente, al extender tipos b&amp;aacute;sicos (string, int)&amp;nbsp;soy partidario del segundo punto, de modo que si vamos a extender elementos de tipo IComparable, en lugar de usar el namespace &amp;lsquo;CustomExtensions&amp;rsquo; prefiero usar el nombre del namespace que contiene la definici&amp;oacute;n de este tipo, o sea &amp;lsquo;System&amp;rsquo;:&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div id="codeSnippet" style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; &lt;span style="background-color:#ffff00;"&gt;System&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; ExtensionMethods&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; Between&amp;lt;T&amp;gt;(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; T @&lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;, T min, T max) &lt;span style="color:#0000ff;"&gt;where&lt;/span&gt; T : IComparable&amp;lt;T&amp;gt;&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; @&lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;.CompareTo(min) &amp;gt;= 0 &amp;amp;&amp;amp; @&lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;.CompareTo(max) &amp;lt;= 0;&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Pero ese es &lt;strong&gt;mi punto de vista&lt;/strong&gt;, tu que opinas? Twitteros manifestaos! :-)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=187244" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Frikadas/default.aspx">Frikadas</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/2010/default.aspx">2010</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Codigo/default.aspx">Codigo</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Debate/default.aspx">Debate</category></item><item><title>La característica más extraña que has visto en un lenguaje</title><link>http://geeks.ms/blogs/lfranco/archive/2010/01/14/la-caracter-237-stica-m-225-s-extra-241-a-que-has-visto-en-un-lenguaje.aspx</link><pubDate>Thu, 14 Jan 2010 08:37:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:164971</guid><dc:creator>Lluis Franco</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lfranco/rsscomments.aspx?PostID=164971</wfw:commentRss><comments>http://geeks.ms/blogs/lfranco/archive/2010/01/14/la-caracter-237-stica-m-225-s-extra-241-a-que-has-visto-en-un-lenguaje.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.uyssoft.com/blog/images/Lacaractersticamsextraaquehasvistoenunle_EE42/so.png"&gt;&lt;img height="61" width="250" src="http://www.uyssoft.com/blog/images/Lacaractersticamsextraaquehasvistoenunle_EE42/so_thumb.png" alt="so" border="0" title="so" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Que Bueno! &lt;/p&gt;
&lt;p&gt;Acabo de leer un &lt;a target="_blank" href="http://stackoverflow.com/questions/1995113/strangest-language-feature"&gt;post muy cachondo en Stack Overflow&lt;/a&gt;, y todav&amp;iacute;a me estoy riendo por acabo de leer. En este post se puede leer: &lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;&amp;ldquo;What is, in your opinion, the most surprising, weird, strange or really &amp;lsquo;WTF&amp;rsquo; language feature you have encountered?&amp;rdquo;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Que podriamos traducir algo as&amp;iacute; como:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;&amp;ldquo;Cual es en tu opini&amp;oacute;n, la caracter&amp;iacute;stica de un lenguaje m&amp;aacute;s sorprendente, rara, extra&amp;ntilde;a, o m&amp;aacute;s &amp;lsquo;pero que co... es esto&amp;rsquo; que has visto jam&amp;aacute;s&amp;rdquo;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p align="justify"&gt;La verdad es que despu&amp;eacute;s de leer el post, veo que a algunas de ellas ya las conoc&amp;iacute;a, pero otras han sido tremendamente reveladoras. Al final me quedo con dos cosas: La primera es mi reafirmaci&amp;oacute;n en mi odio produndo a Javascript (pues si, que pasa... no me gusta nada de nada, aunque tenga que usarlo por OO). Y la segunda es que todos los lenguajes o plataformas tienen sus cosas, y .NET no es una excepci&amp;oacute;n, pero esta de Java no tiene desperdicio:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;Fun with auto boxing and the integer cache in Java.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;Integer foo = 1000; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;Integer bar = 1000; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;foo &amp;lt;= bar; &lt;span style="color:#008000;"&gt;// true &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;foo &amp;gt;= bar; &lt;span style="color:#008000;"&gt;// true &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;foo == bar; &lt;span style="color:#008000;"&gt;// false &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//However, if the values of foo and bar are between 127 and -128 (inclusive) &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//the behaviour changes: &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;Integer foo = 42; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;Integer bar = 42; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;foo &amp;lt;= bar; &lt;span style="color:#008000;"&gt;// true &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;foo &amp;gt;= bar; &lt;span style="color:#008000;"&gt;// true &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;foo == bar; &lt;span style="color:#008000;"&gt;// true &lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Ni esta otra, en &lt;a target="_blank" href="http://en.wikipedia.org/wiki/PL/I"&gt;PL/1&lt;/a&gt;:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;IF&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;IF&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;THEN&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;THEN&lt;/span&gt; = &lt;span style="color:#0000ff;"&gt;ELSE&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;ELSE&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;ELSE&lt;/span&gt; = THEN&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;En fin, tremendo!!! :-)))&lt;/p&gt;
&lt;p&gt;Cual es la mejor en vuestra opini&amp;oacute;n? No tiene porque estar en el post original...&lt;/p&gt;
&lt;p&gt;Ver el post original:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://stackoverflow.com/questions/1995113/strangest-language-feature" title="http://stackoverflow.com/questions/1995113/strangest-language-feature"&gt;http://stackoverflow.com/questions/1995113/strangest-language-feature&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Saludos desde Andorra,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=164971" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Humor/default.aspx">Humor</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Frikadas/default.aspx">Frikadas</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Curiosidad/default.aspx">Curiosidad</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Codigo/default.aspx">Codigo</category></item><item><title>Microsoft Virtual Business Cards para MCPs</title><link>http://geeks.ms/blogs/lfranco/archive/2009/12/10/microsoft-virtual-business-cards-para-mcps.aspx</link><pubDate>Thu, 10 Dec 2009 12:11:06 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:162288</guid><dc:creator>Lluis Franco</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lfranco/rsscomments.aspx?PostID=162288</wfw:commentRss><comments>http://geeks.ms/blogs/lfranco/archive/2009/12/10/microsoft-virtual-business-cards-para-mcps.aspx#comments</comments><description>&lt;p align="justify"&gt;Como ya sabéis, el pasado Junio Microsoft decidió terminar con los paquetes de bienvenida (también llamados Welcome kits). Se supone que los motivos son ecológicos y no tienen nada que ver con el ahorro de costes, pero en estos tiempos de crisis... uhm... no se, no se :-)&lt;/p&gt;  &lt;p align="justify"&gt;La cuestión es que existe un nuevo servicio para todos los MCP gracias al cual uno se puede crear su propia tarjeta de visita, y compartirla con el resto de la comunidad. &lt;/p&gt;  &lt;p align="justify"&gt;Al igual que &lt;a href="http://geeks.ms/blogs/dnudelman/archive/2009/12/09/virtual-business-cards-released.aspx" target="_blank"&gt;David&lt;/a&gt;, al principio pensé que era una chorrada, pero la verdad es que el resultado es una chulada :-)&lt;/p&gt;  &lt;p align="justify"&gt;Os dejo una muestra en diversos formatos:&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;u&gt;HTML:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;iframe height="180" src="https://www.mcpvirtualbusinesscard.com/VBCServer/lfranco/card" frameborder="0" width="397" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;u&gt;Java Script (mira en My Certifications):&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;iframe height="177" src="https://www.mcpvirtualbusinesscard.com/VBCServer/lfranco/interactivecard" frameborder="0" width="392" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Imagen:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.uyssoft.com/blog/images/MicrosoftVirtualBusinessCards_B70E/GetCardImage.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="GetCardImage" border="0" alt="GetCardImage" src="http://www.uyssoft.com/blog/images/MicrosoftVirtualBusinessCards_B70E/GetCardImage_thumb.png" width="401" height="181" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=162288" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Frikadas/default.aspx">Frikadas</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/MCP/default.aspx">MCP</category></item><item><title>Server Quest II A day in a geek’s life…</title><link>http://geeks.ms/blogs/lfranco/archive/2009/04/08/server-quest-ii-a-day-in-a-geek-s-life.aspx</link><pubDate>Wed, 08 Apr 2009 15:52:41 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:146474</guid><dc:creator>Lluis Franco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lfranco/rsscomments.aspx?PostID=146474</wfw:commentRss><comments>http://geeks.ms/blogs/lfranco/archive/2009/04/08/server-quest-ii-a-day-in-a-geek-s-life.aspx#comments</comments><description>&lt;p&gt;Que pasada!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/click/serverquest"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="clip_image002" border="0" alt="clip_image002" src="http://blogimages.uyssoft.com/ServerQuestIIAdayinageekslife_FABB/clip_image002.jpg" width="735" height="98" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Me acaba de llegar un enlace, vale la pena darle una ojeada... No os quiero contar nada porque quiero que lo veáis con vuestros propios ojos :-)&lt;/p&gt;  &lt;p&gt;Me recuerda a los viejos juegos &lt;a href="http://www.google.com/search?hl=es&amp;amp;q=mame&amp;amp;lr=" target="_blank"&gt;MAME&lt;/a&gt;, jejeje…&lt;/p&gt;  &lt;p&gt;Ah! Y buen finde largo (los que lo tengan). &lt;/p&gt;  &lt;p&gt;Saludos!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=146474" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Frikadas/default.aspx">Frikadas</category></item><item><title>Google Chrome usa ClickOnce :-)</title><link>http://geeks.ms/blogs/lfranco/archive/2009/04/06/google-chrome-usa-clickonce.aspx</link><pubDate>Mon, 06 Apr 2009 10:02:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:146312</guid><dc:creator>Lluis Franco</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lfranco/rsscomments.aspx?PostID=146312</wfw:commentRss><comments>http://geeks.ms/blogs/lfranco/archive/2009/04/06/google-chrome-usa-clickonce.aspx#comments</comments><description>&lt;p align="justify"&gt;Pues eso. Tal vez muchos de vosotros ya lo sab&amp;iacute;ais pero esta ma&amp;ntilde;ana me he quedado de piedra al comprobar que la instalaci&amp;oacute;n de Google Chrome se realiza mediante la tecnolog&amp;iacute;a &lt;a target="_blank" href="http://msdn.microsoft.com/es-es/library/wh45kb66.aspx"&gt;ClickOnce&lt;/a&gt; de Microsoft. Curioso verdad? Para muestra un bot&amp;oacute;n:&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://blogimages.uyssoft.com/GoogleChromeusaClickOnce_9B10/Chrome_Clickonce1.png"&gt;&lt;img height="150" width="386" src="http://blogimages.uyssoft.com/GoogleChromeusaClickOnce_9B10/Chrome_Clickonce1_thumb.png" alt="Chrome_Clickonce1" border="0" title="Chrome_Clickonce1" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://blogimages.uyssoft.com/GoogleChromeusaClickOnce_9B10/Chrome_Clickonce2.png"&gt;&lt;img height="295" width="520" src="http://blogimages.uyssoft.com/GoogleChromeusaClickOnce_9B10/Chrome_Clickonce2_thumb.png" alt="Chrome_Clickonce2" border="0" title="Chrome_Clickonce2" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;Si lo piensas es normal, ya que el c&amp;oacute;digo del producto para Windows no deja de ser una soluci&amp;oacute;n de Visual Studio 2005 (15 proyectos si no recuerdo mal), de modo que es relativamente normal que se hayan aprovechado de una tecnolog&amp;iacute;a tan *cojonuda* (y perd&amp;oacute;n por la expresi&amp;oacute;n) com es &lt;a href="http://msdn.microsoft.com/es-es/library/wh45kb66.aspx"&gt;ClickOnce&lt;/a&gt; para el despliegue de aplicaciones.&lt;/p&gt;
&lt;p align="justify"&gt;Lo que no deja de ser gracioso es que de momento Chrome no tenga versiones estables para Mac ni para Linux (de hecho &lt;a href="http://dev.chromium.org/developers/how-tos/build-instructions-os-x"&gt;seg&amp;uacute;n los mismos desarrolladores&lt;/a&gt; &amp;quot;Esta mas cerca del comienzo que del fin&amp;quot;), y la &amp;uacute;nica versi&amp;oacute;n que funciona m&amp;aacute;s o menos bien est&amp;eacute; desarrollada con la herramienta de desarrollo m&amp;aacute;s popular de la competencia :-P&lt;/p&gt;
&lt;p align="justify"&gt;En fin, como dije antes&amp;hellip; curioso, verdad?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=146312" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lfranco/archive/tags/General/default.aspx">General</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Tecnologia/default.aspx">Tecnologia</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Frikadas/default.aspx">Frikadas</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Visual+Studio/default.aspx">Visual Studio</category></item><item><title>SR-71 Blackbird, un sueño hecho realidad</title><link>http://geeks.ms/blogs/lfranco/archive/2009/02/19/sr-71-blackbird-un-sue-241-o-hecho-realidad.aspx</link><pubDate>Thu, 19 Feb 2009 11:00:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:143044</guid><dc:creator>Lluis Franco</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lfranco/rsscomments.aspx?PostID=143044</wfw:commentRss><comments>http://geeks.ms/blogs/lfranco/archive/2009/02/19/sr-71-blackbird-un-sue-241-o-hecho-realidad.aspx#comments</comments><description>&lt;p align="justify"&gt;&lt;a href="http://blogimages.uyssoft.com/SR71Blackbirdunsueohechorealidad_A3CB/photo99.jpg"&gt;&lt;img border="0" align="left" width="184" src="http://blogimages.uyssoft.com/SR71Blackbirdunsueohechorealidad_A3CB/photo99_thumb.jpg" alt="photo99" height="244" style="border-right:0px;border-top:0px;display:inline;margin:0px 10px 0px 0px;border-left:0px;border-bottom:0px;" title="photo99" /&gt;&lt;/a&gt;Recuerdo que cuando ten&amp;iacute;a unos 10 a&amp;ntilde;itos, quer&amp;iacute;a ser piloto de cazas. Me pasaba tardes enteras mirando colecciones de cromos, y me compraba todas las revistas de aviones que me permit&amp;iacute;a mi escasa asignaci&amp;oacute;n semanal. Y so&amp;ntilde;aba, como sue&amp;ntilde;an todos los ni&amp;ntilde;os en cumplir alg&amp;uacute;n d&amp;iacute;a mis sue&amp;ntilde;os...&lt;/p&gt;
&lt;p align="justify"&gt;De entre todos los aviones habidos y por haber, hab&amp;iacute;a uno que era mi favorito: El &lt;a href="http://es.wikipedia.org/wiki/SR-71_Blackbird"&gt;Lockheed SR-71Blackbird&lt;/a&gt;. Era precioso, muy avanzado para su tiempo, y su dise&amp;ntilde;o era genial, simplemente una obra de arte. M&amp;aacute;s bien parec&amp;iacute;a una nave espacial antes que un avi&amp;oacute;n, y eso para alguien que se cri&amp;oacute; con Star-Wars era toda una tentaci&amp;oacute;n.&lt;/p&gt;
&lt;p align="justify"&gt;En fin, a la vista est&amp;aacute; que mi sue&amp;ntilde;o se qued&amp;oacute; en eso... un sue&amp;ntilde;o. Pero da igual, estoy seguro que muchos de nosotros tenemos alg&amp;uacute;n sue&amp;ntilde;o que no hemos podido cumplir. Aunque esa es otra historia, tampoco puedo quejarme ya que la vida me ha tratado bien.&lt;/p&gt;
&lt;p align="justify"&gt;Sin embargo, esta ma&amp;ntilde;ana mientras estaba buscando unas viejas fotos, me he topado con una serie de fotos que me han hecho recordar un momento que para m&amp;iacute; fue muy especial. Fue en 2005, en el que fue mi primer &lt;a href="http://www.uyssoft.com/Gallery/MVPSummit2005/"&gt;MVP Summit&lt;/a&gt;.&lt;/p&gt;
&lt;p align="justify"&gt;Despu&amp;eacute;s de tres d&amp;iacute;as de conferencias, sesiones, eventos, comidas y alguna salida nocturna por las calles de Seattle, unos cuantos de nosotros decidimos escaparnos al mueso de la Boeing. Era una peque&amp;ntilde;a excursi&amp;oacute;n en la que aprovechar&amp;iacute;amos para ir a comprar a alg&amp;uacute;n centro comercial y yo aprovechar&amp;iacute;a para poder ver alg&amp;uacute;n avi&amp;oacute;n.&lt;/p&gt;
&lt;p align="justify"&gt;Pero all&amp;iacute;, para mi sorpresa me encontr&amp;eacute; con que en mitad de un hangar enorme hab&amp;iacute;a un SR-71. No os cuento lo que fue poder verlo y tocarlo (aunque estaba prohibido :-P). Pude observar los motores con todo detalle, subir en una r&amp;eacute;plica de la cabina, y pasearme por debajo como en su d&amp;iacute;a hicieron Clint Eastwood y Tommy Lee Jones en Space Comwoys. De esa pel&amp;iacute;cula recuerdo una frase que dice que &amp;ldquo;el Blackbird cuando est&amp;aacute; posado en tierra es como un ladrillo, feo y hasta gotea combustible, pero que cuando se pone a Mach 3 sus juntas se cierran, todo encaja perfectamente y se convierte en una m&amp;aacute;quina perfecta&amp;rdquo;.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://blogimages.uyssoft.com/SR71Blackbirdunsueohechorealidad_A3CB/photo97.jpg"&gt;&lt;img border="0" width="244" src="http://blogimages.uyssoft.com/SR71Blackbirdunsueohechorealidad_A3CB/photo97_thumb.jpg" alt="photo97" height="184" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" title="photo97" /&gt;&lt;/a&gt; &lt;a href="http://blogimages.uyssoft.com/SR71Blackbirdunsueohechorealidad_A3CB/photo98.jpg"&gt;&lt;img border="0" width="244" src="http://blogimages.uyssoft.com/SR71Blackbirdunsueohechorealidad_A3CB/photo98_thumb.jpg" alt="photo98" height="184" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" title="photo98" /&gt;&lt;/a&gt;&amp;nbsp; &lt;/p&gt;
&lt;p align="justify"&gt;&amp;nbsp;&lt;a href="http://blogimages.uyssoft.com/SR71Blackbirdunsueohechorealidad_A3CB/photo102.jpg"&gt;&lt;img border="0" width="244" src="http://blogimages.uyssoft.com/SR71Blackbirdunsueohechorealidad_A3CB/photo102_thumb.jpg" alt="photo102" height="184" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" title="photo102" /&gt;&lt;/a&gt; &lt;a href="http://blogimages.uyssoft.com/SR71Blackbirdunsueohechorealidad_A3CB/photo103.jpg"&gt;&lt;img border="0" width="244" src="http://blogimages.uyssoft.com/SR71Blackbirdunsueohechorealidad_A3CB/photo103_thumb.jpg" alt="photo103" height="184" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" title="photo103" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;En fin, fue una sensaci&amp;oacute;n muy especial... Casi llego a considerar cumplido mi sue&amp;ntilde;o.&lt;/p&gt;
&lt;p align="justify"&gt;Hablando de sue&amp;ntilde;os. Recuerdas alguno de tus sue&amp;ntilde;os de ni&amp;ntilde;o que no hayas podido cumplir?&lt;/p&gt;
&lt;p align="justify"&gt;Un saludo desde Andorra, &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=143044" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Frikadas/default.aspx">Frikadas</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Off-Topic/default.aspx">Off-Topic</category></item><item><title>10 cosas que me gustan de C# respecto a VB</title><link>http://geeks.ms/blogs/lfranco/archive/2008/12/23/10-cosas-que-me-gustan-de-c-respecto-a-vb.aspx</link><pubDate>Tue, 23 Dec 2008 16:44:53 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:134033</guid><dc:creator>Lluis Franco</dc:creator><slash:comments>22</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lfranco/rsscomments.aspx?PostID=134033</wfw:commentRss><comments>http://geeks.ms/blogs/lfranco/archive/2008/12/23/10-cosas-que-me-gustan-de-c-respecto-a-vb.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/pelea_0F4B4E51.jpg"&gt;&lt;img title="pelea" style="border-right:0px;border-top:0px;display:inline;margin:0px 10px 0px 0px;border-left:0px;border-bottom:0px;" height="244" alt="pelea" src="http://geeks.ms/blogs/lfranco/pelea_thumb_16F8D862.jpg" width="220" align="left" border="0" /&gt;&lt;/a&gt;Antes de empezar a leer este post, un aviso: En ningún modo pretendo crear polémica o abrir el viejo debate otra vez, si no más bien enumerar algunas cosillas que hacen que &lt;strong&gt;*yo*&lt;/strong&gt; me sienta más cómodo trabajando con C# que con VB, tanto a nivel de lenguaje como del propio editor. Lo remarco porque quiero que quede bien claro que es una opinión personal, ok? No se trata de comerle el coco a nadie…&lt;/p&gt;  &lt;p&gt;Algunas de estas cosillas ya las he compartido con algunos de vosotros en algún evento de los grupos de usuarios, o simplemente delante de unas cervezas (aquí la conversación suele tornarse más pasional y tiende a alargarse un poco), jejeje…, y a decir verdad pocas veces nos ponemos de acuerdo ¿eh &lt;a title="Guille" href="http://www.elguille.info/" target="_blank"&gt;agüelo&lt;/a&gt;?. Parece ser que antes de empezar a hablar cada cual ya se ha posicionado y de aquí no nos movemos… lo cual es hasta cierto punto normal. Uno sabe con qué herramienta se encuentra más cómodo, aunque pueda usar ambas de forma indistinta.&lt;/p&gt;  &lt;p&gt;De hecho &lt;u&gt;he tirado más líneas de código con VB que con cualquier otro lenguaje&lt;/u&gt;, y eso que empecé en este mundillo con C y posteriormente con C++, para luego pasar a los lenguajes ‘más productivos’ como Delphi o finalmente VB en sus primeras versiones. No fue hasta 2002 y las primeras versiones de .NET que volví a usar la vieja sintaxis del punto y coma. De modo que VB en-todas-sus-variedades me es muy querido, y debo reconocerle sus ventajas… Sin embargo, codificar, al igual que leer o hablar, es algo que siempre haces mejor o te sientes más cómodo en uno de los lenguajes que dominas, y aquí reconozco que C# (como antes de conocerlo lo fue Java) es mi predilecto. Siempre que &lt;strong&gt;YO&lt;/strong&gt; decido el lenguaje a utilizar en un nuevo proyecto, lo escojo, y en caso contrario intento convencer a la otra persona (ya sea compañero, cliente, etc.).&lt;/p&gt;  &lt;p&gt;Os enumero a continuación una lista de cosas que me gustan de C#, o más bien que no me gustan cuando al cabo de un tiempo de trabajar con C#, me pongo a codificar con VB. No siguen ningún orden ni patrón y las voy a ir enumerando conforme se me vayan ocurriendo:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;1) Escribo menos código &amp;amp;&amp;amp; código más limpio:&lt;/u&gt;&lt;/strong&gt;     &lt;br /&gt;    &lt;br /&gt;En este punto, un desarrollador de VB acostumbra a decirme que esto no es cierto. Que si bien la sintaxis de VB es en alguno puntos ‘rocambolesca’ es para aclarar, y además el propio editor de código se encarga de escribirlo. Sin embargo tengo comprobado que con el editor de C# en la gran mayoría de las situaciones tecleo menos para decir lo mismo, y queda más claro (al menos para mí). Ojo! Es importante destacar que en ningún momento me mueve el afán de teclear menos, sino que el código resultante sea más legible. Comparemos los siguientes ejemplos: &lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;u&gt;Declarar una variable:&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;C#:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;div&gt;   &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; x = 5;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;VB:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; x &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; Int = 5&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;em&gt;&lt;u&gt;Bloques de código (ends por todas partes :-P).&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;C#:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(Nombre == &lt;span style="color:#006080;"&gt;&amp;quot;Pepe&amp;quot;&lt;/span&gt; &amp;amp;&amp;amp; Sueldo &amp;lt;= 500)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;{&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;...&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;VB:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; Nombre = &lt;span style="color:#006080;"&gt;&amp;quot;Pepe&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;AndAlso&lt;/span&gt; Sueldo &amp;lt;= 500 &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;...&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; If&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;em&gt;&lt;u&gt;Operador AddressOf&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;C#:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;Thread t = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Thread(CountSheep);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;VB:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; t &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; Thread(&lt;span style="color:#0000ff;"&gt;AddressOf&lt;/span&gt; CountSheep)&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;em&gt;&lt;u&gt;Expresiones lambda:&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;C#:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;Func&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;, Func&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&amp;gt;&amp;gt; mult = (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; x) =&amp;gt; (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; y) =&amp;gt; x * y;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;VB:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; mult &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; Func(Of &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;, Func(Of &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;)) = _    &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt;(x &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;) &lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt;(y &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;) x * y&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;br /&gt;

&lt;p&gt;&lt;em&gt;&lt;u&gt;Implementar una interfaz (no es preciso Implements):&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;C#:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt; ITest &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;{ &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; getValue();&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;}&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Test : ITest { &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; getValue() &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    { &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        Random r = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Random(); &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; r.Next().ToString(); &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    } &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;VB:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Interface&lt;/span&gt; ITest    &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt; getValue() &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Interface&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt; Test    &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Implements&lt;/span&gt; ITest     &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt; getValue() &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Implements&lt;/span&gt; ITest.getValue&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; r &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; Random&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt; r.&lt;span style="color:#0000ff;"&gt;Next&lt;/span&gt;().ToString()&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; Class&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Podriamos seguir con Overridable, Overrides y unos cuantos más... Pero mejor vamos al siguiente punto que si no, no acabo el post hoy… :-)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;2) No más underscores!&lt;/u&gt;&lt;/strong&gt; 

  &lt;br /&gt;

  &lt;br /&gt;Cuantas veces he tenido que escuchar “&lt;em&gt;no tengo porque terminar cada línea de código con un punto y coma!&lt;/em&gt;”. Pues precisamente, el delimitador de línea es lo que permite que en los lenguajes derivados del viejo y bueno ‘C’ no tengamos que hacer algo tan antinatural como partir las líneas de código con underscores (_). Además suele pasar que es una de las cosas que olvido con mayor rapidez, y cada vez que escribo en VB una query con LINQ acabo por soltar un “AAAAARGH!!! OTRA VEZ!!!”. 

  &lt;br /&gt;

  &lt;br /&gt;&lt;strong&gt;&lt;u&gt;C#&lt;/u&gt;&lt;/strong&gt; 

  &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;List&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&amp;gt; nums = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&amp;gt;(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;[] { 1, 2, 3, 4 });&lt;/pre&gt;

  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;var mynums = from n &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; nums&lt;/pre&gt;

  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;             &lt;span style="color:#0000ff;"&gt;where&lt;/span&gt; n &amp;lt; 5&lt;/pre&gt;

  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;             orderby n&lt;/pre&gt;

  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;             select n;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;VB:&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; nums &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; List(Of &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;)(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;() {1, 2, 3, 4}) &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; mynums = From n &lt;span style="color:#0000ff;"&gt;In&lt;/span&gt; nums _ &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    Where n &amp;lt; 5 _ &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    Order By n _ &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Select&lt;/span&gt; n &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div&gt;
  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;3) Matrices y Listas: [] en lugar de ():&lt;/u&gt;&lt;/strong&gt; 

  &lt;br /&gt;

  &lt;br /&gt;Cuando estoy picando o leyendo código me gusta saber con exactitud si estoy llamando a una función, a una propiedad u obteniendo el valor de una matriz o colección. Precisamente por eso prefiero usar corchetes en lugar de paréntesis para acceder a los miembros de una matriz o lista. En el ejemplo siguiente en la llamada a nums(i) en VB, podría ser tanto un método como una matriz, como una propiedad que devuelve una matriz o lista: 

  &lt;br /&gt;

  &lt;br /&gt;&lt;strong&gt;&lt;u&gt;C#&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;List&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&amp;gt; nums = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&amp;gt;(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;[] { 1, 2, 3, 4 });&lt;/pre&gt;

  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;Console.WriteLine(nums[2].ToString());&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;VB: 
      &lt;br /&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; nums &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; List(Of &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;)(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;() {1, 2, 3, 4}) &lt;/pre&gt;

  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;Console.WriteLine(nums(2).ToString()) &lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;4) Parámetros de salida (out):&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tipos de parámetro de salida. Estos son muy parecidos a los parámetros por referencia (ref), pero no necesitan ser inicializados. Resultan particularmente útiles en algoritmos recursivos. Visual Basic no dispone de nada equivalente, aunque si permite el paso de valores por referencia.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;C#:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Method(&lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; i)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;{&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    i = 44;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;}&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Main()&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;{&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    Method(&lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;5) Los códigos de escape y las cadenas verbatim:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Otra cosa que me molesta es que VB no reconoce los &lt;a href="http://msdn.microsoft.com/es-es/library/aa691087(VS.71).aspx" target="_blank"&gt;carácteres de escape&lt;/a&gt; contenidos en un string. Esto es particularmente útil cuando deseamos mostrar un retorno de línea ‘\n’ o una tabulación ‘\t’ dentro de una cadena. En Visual Basic hay que recorrer a la concatenación de Environment.NewLine o artimañas parecidas como concatenar directamente el carácter. Por ejemplo el código siguiente se muestra así:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;MessageBox.Show(&lt;span style="color:#006080;"&gt;&amp;quot;hola\nque\ntal&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div&gt;&amp;#160;&lt;/div&gt;

&lt;div&gt;&lt;strong&gt;&lt;u&gt;C#:&lt;/u&gt;&lt;/strong&gt;&lt;/div&gt;

&lt;div&gt;&amp;#160;&lt;/div&gt;

&lt;div&gt;&lt;a href="http://geeks.ms/blogs/lfranco/MsgBox1_08BCF023.png"&gt;&lt;img title="MsgBox1" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="136" alt="MsgBox1" src="http://geeks.ms/blogs/lfranco/MsgBox1_thumb_03DA3C67.png" width="106" border="0" /&gt;&lt;/a&gt; &lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;VB:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/MsgBox2_3397E4E6.png"&gt;&lt;img title="MsgBox2" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="112" alt="MsgBox2" src="http://geeks.ms/blogs/lfranco/MsgBox2_thumb_3C877725.png" width="107" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;En este punto más de uno se preguntará ¿y que pasa si no quiero tratar estos caracteres de escape como especiales?, ¿o si quiero mostrar una ruta de acceso que contiene varios caracteres ‘\’? Bien, para ello tenemos varias alternativas: Podemos anteponer un carácter ‘\’ a todo símbolo que deseemos mostrar literalmente o podemos usar &lt;a href="http://msdn.microsoft.com/es-es/library/aa691090(VS.71).aspx" target="_blank"&gt;cadenas verbatim&lt;/a&gt; (también llamado ‘literal de cadena textual’):&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;MessageBox.Show(&lt;span style="color:#006080;"&gt;&amp;quot;C:\\Windows\\system32\\Calc.exe&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div&gt;&amp;#160;&lt;/div&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;MessageBox.Show(&lt;span style="color:#006080;"&gt;@&amp;quot;hola\nque\ntal&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Las cadenas verbatim van incluso un poco más allá y permiten incluso poder partir una cadena en varias líneas, lo que clarifica en mucho el código:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;MessageBox.Show(&lt;span style="color:#006080;"&gt;@&amp;quot;SELECT O.OrderID, O.CustomerID, O.EmployeeID, &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;                &lt;font color="#008080"&gt;O.OrderDate, O.RequiredDate, O.ShippedDate,&lt;/font&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;                &lt;font color="#008080"&gt;O.ShipVia, O.Freight, O.ShipName, O.ShipAddress,&lt;/font&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;                &lt;font color="#008080"&gt;O.ShipCity, O.ShipRegion, O.ShipPostalCode,&lt;/font&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;                &lt;font color="#008080"&gt;O.ShipCountry, C.CompanyName, C.Address,&lt;/font&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;                &lt;font color="#008080"&gt;C.City, C.Region, C.PostalCode, C.Country&lt;/font&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;                &lt;font color="#008080"&gt;FROM dbo.Customers AS C&lt;/font&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;                &lt;font color="#008080"&gt;INNER JOIN dbo.Orders AS O&lt;/font&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;                &lt;font color="#008080"&gt;ON C.CustomerID = O.CustomerID&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;6) Propiedades autogeneradas:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Algo tan sencillo como crear una propiedad para una clase, lo es todavía más en C#, ya que permite el uso de propiedades autogeneradas. Esto hace que el compilador maneje internamente una variable privada a nivel de clase para almacenar el valor, quedando esta parte oculta al desarrollador. Esta característica estará disponible en la próxima versión de Visual Basic, pero de momento todavía tenemos que conformarnos con representarlo así:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;C#:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Foo&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;{&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; id { get; set; }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; name { get; set; }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;VB:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt; Foo &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; _id &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt; id() &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;            &lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt; _id &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;Set&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; value &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;) &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;            _id = value &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Set&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; _name &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt; name() &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;            &lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt; _name &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;Set&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; value &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;) &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;            _name = value &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Set&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; Class&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;7) Refactoring:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hoy en día, al igual que el uso de pruebas unitarias, empieza a ser impensable no refactorizar el código para una mejor comprensión, que repercute en un mejor índice de mantenibilidad (o &lt;em&gt;Maintainability index&lt;/em&gt;, vaya usted a saber cómo se traduce) del código. Bien, pues el menú ‘Refactor’ del editor de C# no aparece en VB. Y la única información acerca de refactorizar el código VB nos enlaza con un &lt;a href="http://msdn.microsoft.com/en-us/vbasic/bb693327.aspx" target="_blank"&gt;Add-In de terceros&lt;/a&gt;, la cual a decir verdad es una gran utilidad. Lo sé, porque he usado la versión PRO de este producto durante bastante tiempo. Pero el hecho es que Visual Studio no incorpora ninguna utilidad ‘de fábrica’ para refactorizar el código, lo que no deja de ser sorprendente…&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/RefactorMenu_6C451FA4.png"&gt;&lt;img title="RefactorMenu" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="174" alt="RefactorMenu" src="http://geeks.ms/blogs/lfranco/RefactorMenu_thumb_071145B1.png" width="255" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;8) &lt;/u&gt;&lt;/strong&gt;&lt;strong&gt;&lt;u&gt;Posibilidad de desactivar ‘Strict on’:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Al ser VB la evolución de un lenguaje no tan ‘estricto’ como C#, nos ofrece la posibilidad de desactivar la opción Strict On, y de este modo dejar que el compilador se encargue de realizar muchas conversiones implícitas. Pero lo más peligroso de todo es que la opción viene desactivada ‘de fábrica’ y en cambio no conozco ningún buen programador de VB (que los hay, y muchos) que no sea lo primero que active. Muchos errores en tiempo de ejecución podrían ser evitados si el propio compilador nos obligase a codificar correctamente, en lugar de actual de este modo más ‘relajado’:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;VB (con Option Strict Off):&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; s &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;s = DateTime.Today&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;VB (con Option Strict On):&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; s &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;s = DateTime.Today.ToString()&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Observar que con Option Strict activado, el compilador no permite asignar una fecha a una variable de tipo cadena (con razón!), de modo que para poder compilar debemos realizar una conversión explícita.&lt;/p&gt;

&lt;p&gt;Recomiendo dar un vistazo a este artículo de coding horror: 
  &lt;br /&gt;&lt;a title="http://www.codinghorror.com/blog/archives/000355.html" href="http://www.codinghorror.com/blog/archives/000355.html"&gt;http://www.codinghorror.com/blog/archives/000355.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;9) Microsoft.VisualBasic:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Son legión los programadores que provienen de versiones anteriores de .NET (6 o anteriores), de modo que para facilitarles el camino los proyectos de VB incorporan el espacio de nombres Microsoft.VisualBasic, el cual a su vez incorpora muchas de las funciones de estas versiones anteriores. El hecho de incorporarlas no es un error en sí, lo malo es que estas funciones tienen su equivalente en el modelo de objetos del framework, y si seguimos usando estas funciones ‘antiguas’ no aprenderemos las nuevas, y el día en que debamos trabajar con otro lenguaje del Framework (que no tiene porque ser C#, hay unos cuantos más :-P) nos encontraremos con que estamos usando funciones propias de VB y no conoceremos su equivalente.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/ObjectExplorer_2BA563E6.png"&gt;&lt;img title="ObjectExplorer" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="441" alt="ObjectExplorer" src="http://geeks.ms/blogs/lfranco/ObjectExplorer_thumb_1ECD9E79.png" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Por ejemplo, en lugar de llamar a la función Len para averiguar el número de caracteres de una cadena, es mejor usar el método Lenght de la clase String, lo mismo para Trim(), y todavía es más flagrante con Mid(), que equivale al método SubString del objeto String:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; n &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; = Len(DateTime.Now.ToLongDateString)    &lt;span style="color:#008000;"&gt;&amp;#39;NO&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; n &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; = DateTime.Now.ToLongDateString.Lenght  &lt;font color="#008000"&gt;&amp;#39;SI&lt;/font&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div&gt;
  &lt;br /&gt;No son pocos los esfuerzos de muchos compañeros, fantásticos programadores como &lt;a href="http://geeks.ms/blogs/jorge/archive/2008/10/31/c-243-mo-eliminar-la-refencia-al-ensamblado-microsoft-visualbasic-dll-en-nuestros-proyectos.aspx" target="_blank"&gt;Jorge Serrano&lt;/a&gt; o &lt;a href="http://msdn.microsoft.com/es-es/library/bb972193.aspx" target="_blank"&gt;Harvey Triana&lt;/a&gt; para eliminar esta librería de nuestras aplicaciones, de modo que la recomendación siempre acaba siendo “no la uses, no la mires, haz como si no estuviera…”. Por cierto, os recomiendo una lectura de ambos artículos.&lt;/div&gt;

&lt;div&gt;&lt;a title="http://geeks.ms/blogs/jorge/archive/2008/10/31/c-243-mo-eliminar-la-refencia-al-ensamblado-microsoft-visualbasic-dll-en-nuestros-proyectos.aspx" href="http://geeks.ms/blogs/jorge/archive/2008/10/31/c-243-mo-eliminar-la-refencia-al-ensamblado-microsoft-visualbasic-dll-en-nuestros-proyectos.aspx"&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div&gt;&lt;strong&gt;&lt;u&gt;10) Hay más, y no se por cual decidirme…&lt;/u&gt;&lt;/strong&gt;&lt;/div&gt;

&lt;p&gt;Hay muchas otras cosas que se quedan en el tintero, porque algunas de ellas son demasiado largas (como el manejo de eventos), y otras no son precisamente de uso diario, como la ejecución de código no seguro (unsafe). Pero estaremos de acuerdo en que la mayoría de las novedades aparecen primero para C# (inicializadores de colecciones, propiedades autogeneradas, soporte para expresiones lambda ‘de verdad’, etc.) e incluso los compiladores de C# del proyecto MoNo van siempre por delante de los de VB. Aunque este último punto reconozco que no es demasiado importante… o sí?&lt;/p&gt;

&lt;p&gt;En fin, vaya chapa me ha salido! Pero por lo menos ahora tengo una lista de cosas para cuando me pregunten “¿porque te gusta más C# que VB?”.&lt;/p&gt;

&lt;p&gt;Un saludo desde Andorra,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=134033" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/VB/default.aspx">VB</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Frikadas/default.aspx">Frikadas</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Comparativa/default.aspx">Comparativa</category></item><item><title>DXHelmet: El futuro de la interacción hombre - máquina</title><link>http://geeks.ms/blogs/lfranco/archive/2008/10/28/dxhelmet-el-futuro-de-la-interacci-243-n-hombre-m-225-quina.aspx</link><pubDate>Tue, 28 Oct 2008 08:26:55 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:109538</guid><dc:creator>Lluis Franco</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lfranco/rsscomments.aspx?PostID=109538</wfw:commentRss><comments>http://geeks.ms/blogs/lfranco/archive/2008/10/28/dxhelmet-el-futuro-de-la-interacci-243-n-hombre-m-225-quina.aspx#comments</comments><description>&lt;p&gt;Ver para creer… si hace unos años me dicen que esto sería posible no me lo hubiese creído.&lt;/p&gt;  &lt;p&gt;Como dicen ellos mismos:   &lt;br /&gt;[…] The future of software development is here - the way in which you interact with the computer will never be the same again...&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/Helmet1_0CE9CEE6.png"&gt;&lt;img title="Helmet1" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="151" alt="Helmet1" src="http://geeks.ms/blogs/lfranco/Helmet1_thumb_70993A6D.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://geeks.ms/blogs/lfranco/Helmet2_5D7A9E72.png"&gt;&lt;img title="Helmet2" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="139" alt="Helmet2" src="http://geeks.ms/blogs/lfranco/Helmet2_thumb_10BB3797.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;No os digo más, darle un vistazo que vale la pena:   &lt;br /&gt;&lt;a title="http://devexpress.com/helmet" href="http://devexpress.com/helmet"&gt;http://devexpress.com/helmet&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=109538" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Frikadas/default.aspx">Frikadas</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Off-Topic/default.aspx">Off-Topic</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Futures/default.aspx">Futures</category></item><item><title>Quieres ver las caras del VBTeam?</title><link>http://geeks.ms/blogs/lfranco/archive/2008/07/24/quieres-ver-las-caras-del-vbteam.aspx</link><pubDate>Thu, 24 Jul 2008 07:04:16 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:92524</guid><dc:creator>Lluis Franco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lfranco/rsscomments.aspx?PostID=92524</wfw:commentRss><comments>http://geeks.ms/blogs/lfranco/archive/2008/07/24/quieres-ver-las-caras-del-vbteam.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/bethmassi" target="_blank"&gt;Beth Massi&lt;/a&gt; publica un par de fotos en el &lt;a href="http://blogs.msdn.com/vbteam/default.aspx"&gt;blog del VBTeam&lt;/a&gt;, y nos cuenta la anécdota de porque todos visten de gris.&lt;/p&gt; &lt;p&gt;&lt;img src="http://blogs.msdn.com/photos/vbteam_gallery2/images/8767850/500x375.aspx" alt="" /&gt; &lt;p&gt;&lt;img src="http://blogs.msdn.com/photos/vbteam_gallery2/images/8767852/500x375.aspx" alt="" /&gt; &lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=92524" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Humor/default.aspx">Humor</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/VB/default.aspx">VB</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Frikadas/default.aspx">Frikadas</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Off-Topic/default.aspx">Off-Topic</category></item><item><title>Debian y sus juguetes, Dilbert y los aleatorios</title><link>http://geeks.ms/blogs/lfranco/archive/2008/05/30/debian-y-sus-juguetes-dilbert-y-los-aleatorios.aspx</link><pubDate>Fri, 30 May 2008 07:50:47 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:87327</guid><dc:creator>Lluis Franco</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lfranco/rsscomments.aspx?PostID=87327</wfw:commentRss><comments>http://geeks.ms/blogs/lfranco/archive/2008/05/30/debian-y-sus-juguetes-dilbert-y-los-aleatorios.aspx#comments</comments><description>&lt;p&gt;:-)&lt;br /&gt;Esta mañana estaba dándole una ojeada al problema &lt;a href="http://www.debian.org/security/2008/dsa-1571" target="_blank"&gt;anunciado&lt;/a&gt; por Luciano Bello sobre la vulnerabilidad descubierta en OpenSSL, que ha generado claves débiles entre el mes de Septiembre de 2006 y el 31 de Marzo de este año. Cuando de repente me he encontrado con estas tiras del genial Dilbert al respecto de la generación de aleatorios:&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/DebianysusjuguetesDilbertylosaleatorios_8A3F/debian1_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="348" alt="debian1" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/DebianysusjuguetesDilbertylosaleatorios_8A3F/debian1_thumb.jpg" width="612" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/DebianysusjuguetesDilbertylosaleatorios_8A3F/debian2_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="302" alt="debian2" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/DebianysusjuguetesDilbertylosaleatorios_8A3F/debian2_thumb.jpg" width="512" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Y No, no voy a hablar sobre el tema, que ya se ha hablado demasiado... Simplemente hacer la reflexión sobre que pasaría si el fallo de seguridad se hubiese producido en el sistema operativo más maléfico del mundo, creado por &lt;a href="http://www.microsoft.com" target="_blank"&gt;Spectra&lt;/a&gt; la compañía que pretende dominar el mundo a golpe de Software.&lt;/p&gt; &lt;p&gt;Más info en:&lt;br /&gt;&lt;a href="http://metasploit.com/users/hdm/tools/debian-openssl/"&gt;http://metasploit.com/users/hdm/tools/debian-openssl/&lt;/a&gt;  &lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=87327" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Tecnologia/default.aspx">Tecnologia</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Humor/default.aspx">Humor</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Frikadas/default.aspx">Frikadas</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Off-Topic/default.aspx">Off-Topic</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/OpenSource/default.aspx">OpenSource</category></item><item><title>Creo que cobro poco para lo que trabajo...</title><link>http://geeks.ms/blogs/lfranco/archive/2008/05/26/creo-que-cobro-poco-para-lo-que-trabajo.aspx</link><pubDate>Mon, 26 May 2008 09:58:35 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:86813</guid><dc:creator>Lluis Franco</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lfranco/rsscomments.aspx?PostID=86813</wfw:commentRss><comments>http://geeks.ms/blogs/lfranco/archive/2008/05/26/creo-que-cobro-poco-para-lo-que-trabajo.aspx#comments</comments><description>&lt;p&gt;:-D&lt;br /&gt;Y es que esta mañana me he dado cuenta de que en una aplicación ASP.NET que estoy desarrollando me ha aparecido uno de esos feos mensajes de error de Javascript. Para sorpresa mía me informaba de que se ha producido un error en la línea 64.591.517&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/Creoquecobropocoparaloquetrabajo_A84D/err_javascript_2.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="294" alt="err_javascript" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/Creoquecobropocoparaloquetrabajo_A84D/err_javascript_thumb.png" width="442" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Vamos a ver: Si llevo un par de meses y medio con la aplicación........ me salen...... a ver......... sobre un millón de líneas al día. No está nada mal, no señor!&lt;/p&gt; &lt;p&gt;Si ya sabía yo que era un mondtuo picando código, jejeje...&lt;/p&gt; &lt;p&gt;Saludos desde Andorra, bajo el agua.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=86813" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Humor/default.aspx">Humor</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Frikadas/default.aspx">Frikadas</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Off-Topic/default.aspx">Off-Topic</category></item><item><title>Buscas un traductor friki?</title><link>http://geeks.ms/blogs/lfranco/archive/2008/01/08/buscas-un-traductor-friki.aspx</link><pubDate>Tue, 08 Jan 2008 19:54:42 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:62218</guid><dc:creator>Lluis Franco</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lfranco/rsscomments.aspx?PostID=62218</wfw:commentRss><comments>http://geeks.ms/blogs/lfranco/archive/2008/01/08/buscas-un-traductor-friki.aspx#comments</comments><description>&lt;p align="justify"&gt;Nunca dejan de sorprenderme las frikadas que uno encuentra en la Web. No se trata de una camiseta con un equalizador que muestra el sonido de ambiente, y tampoco de un lanzamisiles USB, naaaa... En esta ocasi&amp;#243;n os quiero mostrar algo con lo que todo friki de Star wars ha so&amp;#241;ado desde que era peque&amp;#241;ito: Nada m&amp;#225;s y nada menos que un traductor humano -&amp;gt; R2D2!!!&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/Buscasuntraductorfriki_125DE/R2D2_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="251" alt="R2D2" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/Buscasuntraductorfriki_125DE/R2D2_thumb.png" width="436" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Puedes especificar el texto a traducir y hasta descargarlo para ponerlo como melod&amp;#237;a para tu m&amp;#243;vil (aunque esto se reserva para los m&amp;#225;s frikis).&lt;/p&gt;  &lt;p align="justify"&gt;Darle un vistazo, vale la pena: &lt;a title="http://r2d2translator.com/" href="http://r2d2translator.com/"&gt;http://r2d2translator.com/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=62218" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Tecnologia/default.aspx">Tecnologia</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Humor/default.aspx">Humor</category><category domain="http://geeks.ms/blogs/lfranco/archive/tags/Frikadas/default.aspx">Frikadas</category></item></channel></rss>