<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sylverio &#187; Framework.NET</title>
	<atom:link href="http://sylverio.com.br/blog/tag/framework-net/feed/" rel="self" type="application/rss+xml" />
	<link>http://sylverio.com.br/blog</link>
	<description>Análise, Arquitetura, Orientação a Objetos, UML, Tecnologias e Programação</description>
	<lastBuildDate>Fri, 11 May 2012 02:35:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Encode XML com C#</title>
		<link>http://sylverio.com.br/blog/2012/02/encode-xml-com-c/</link>
		<comments>http://sylverio.com.br/blog/2012/02/encode-xml-com-c/#comments</comments>
		<pubDate>Wed, 22 Feb 2012 11:58:15 +0000</pubDate>
		<dc:creator>Carlos Fernando Sylverio</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Framework.NET]]></category>

		<guid isPermaLink="false">http://sylverio.com.br/blog/?p=1032</guid>
		<description><![CDATA[Em um documento XML, existe alguns caracteres especiais que delimitam os elementos, atributos e valores. Quando a informação contida neles se utiliza desses caracteres especiais, o documento XML é corrompido, pois não consegue mais identificar onde é o começo ou &#8230;<p class="read-more"><a href="http://sylverio.com.br/blog/2012/02/encode-xml-com-c/">Saiba mais &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Em um documento XML, existe alguns caracteres especiais que delimitam os elementos, atributos e valores. Quando a informação contida neles se utiliza desses caracteres especiais, o documento XML é corrompido, pois não consegue mais identificar onde é o começo ou fim da informação.</p>
<p><strong>XML Correto</strong></p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;elemento</span> <span style="color: #000066;">atributo</span>=<span style="color: #ff0000;">'Stacem'</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>Formula matemática do item<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/elemento<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p><strong>XML corrompido</strong></p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;elemento</span> <span style="color: #000066;">atributo</span>=<span style="color: #ff0000;">'St'</span>acem<span style="color: #ff0000;">'&gt;</span></span>Valor de X &gt; que valor de Y.<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/elemento<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Para resolver esse problema, devesse utilizar em campos de informações (valores dos elementos ou atributos) um <em>&#8220;encode&#8221;</em> para esses caracteres.</p>
<h3>Encode XML</h3>
<p>Basicamente são 5 valores:</p>
<table>
<tr>
<td><strong>&lt;</strong></td>
<td>&amp;lt;</td>
</tr>
<tr>
<td><strong>&gt;</strong></td>
<td>&amp;gt;</td>
</tr>
<tr>
<td><strong>&quot;</strong></td>
<td>&amp;quot;</td>
</tr>
<tr>
<td><strong>&apos;</strong></td>
<td>&amp;apos;</td>
</tr>
<tr>
<td><strong>&amp;</strong></td>
<td>&amp;amp;</td>
</tr>
</table>
<p>No Framework.NET existem alguns caminhos de aplicar o encode XML:</p>
<p><strong>1. string.Replace()</strong><br />
A maneira mais feia, mas que funciona, seria utilizar o famoso string.Replace().<br />
Repetindo a rotina 5 vezes, uma para cada caracter especial.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #6666cc; font-weight: bold;">string</span> text <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Este é um <span style="color: #008080; font-weight: bold;">\&quot;</span>nó<span style="color: #008080; font-weight: bold;">\&quot;</span> XML com caracteres 'especiais' &amp; &lt;&gt; diferente de tudo!!&quot;</span><span style="color: #008000;">;</span>
<span style="color: #6666cc; font-weight: bold;">string</span> encodedXml <span style="color: #008000;">=</span> text<span style="color: #008000;">.</span><span style="color: #0000FF;">Replace</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;&amp;&quot;</span>, <span style="color: #666666;">&quot;&amp;amp;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Replace</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;&lt; &quot;</span>, <span style="color: #666666;">&quot;&amp;lt;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Replace</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;&gt;&quot;</span>, <span style="color: #666666;">&quot;&amp;gt;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Replace</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;<span style="color: #008080; font-weight: bold;">\&quot;</span>&quot;</span>, <span style="color: #666666;">&quot;&amp;quot;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Replace</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;'&quot;</span>, <span style="color: #666666;">&quot;&amp;apos;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008080; font-style: italic;">// RESULT: Este é um &amp;quot;nó&amp;quot; XML com caracteres &amp;apos;especiais&amp;apos; &amp;amp; &amp;lt;&amp;gt; diferente de tudo!!</span></pre></div></div>

<p><strong>2. System.Web.HttpUtility.HtmlEncode()</strong><br />
É utilizado para codificar textos em HTML, muito utilizado em ASP.NET, porem ele não codifica o apóstrofo e força você utilizar uma referência de pacote Web. Se for uma aplicação desktop, não recomendo sua utilização.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #6666cc; font-weight: bold;">string</span> text <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Este é um <span style="color: #008080; font-weight: bold;">\&quot;</span>nó<span style="color: #008080; font-weight: bold;">\&quot;</span> XML com caracteres 'especiais' &amp; &lt;&gt; diferente de tudo!!&quot;</span><span style="color: #008000;">;</span>
<span style="color: #6666cc; font-weight: bold;">string</span> encodedXml <span style="color: #008000;">=</span> HttpUtility<span style="color: #008000;">.</span><span style="color: #0000FF;">HtmlEncode</span><span style="color: #008000;">&#40;</span>text<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008080; font-style: italic;">// RESULT: Este é um &amp;quot;nó&amp;quot; XML com caracteres 'especiais' &amp;amp; &amp;lt;&amp;gt; diferente de tudo!!</span></pre></div></div>

<p><strong>3. System.Security.SecurityElement.Escape()</strong><br />
Outra maneiroa é utilizar o comando Escape() que trata os 5 caracteres especiais.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #6666cc; font-weight: bold;">string</span> text <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Este é um <span style="color: #008080; font-weight: bold;">\&quot;</span>nó<span style="color: #008080; font-weight: bold;">\&quot;</span> XML com caracteres 'especiais' &amp; &lt;&gt; diferente de tudo!!&quot;</span><span style="color: #008000;">;</span>
<span style="color: #6666cc; font-weight: bold;">string</span> encodedXml <span style="color: #008000;">=</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Security</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">SecurityElement</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Escape</span><span style="color: #008000;">&#40;</span>text<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008080; font-style: italic;">// RESULT: Este é um &amp;quot;nó&amp;quot; XML com caracteres &amp;apos;especiais&amp;apos; &amp;amp; &amp;lt;&amp;gt; diferente de tudo!!</span></pre></div></div>

<p>Gosto muito da opção de codificar com System.Security.SecurityElement.Escape(), acredito que seja a forma mais estética com relação ao código.<br />
Não sei quanto a desempenho das formas, mas manipulação de string não é a melhor das escolhas.<br />
E a segunda alem de não abranger todos os caracteres especiais, ainda fica limitada a aplicações web.</p>
<p>Espero ter ajudado <img src='http://sylverio.com.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://sylverio.com.br/blog/2012/02/encode-xml-com-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gerenciando Threads</title>
		<link>http://sylverio.com.br/blog/2012/02/gerenciando-threads/</link>
		<comments>http://sylverio.com.br/blog/2012/02/gerenciando-threads/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 01:29:04 +0000</pubDate>
		<dc:creator>Carlos Fernando Sylverio</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Framework.NET]]></category>

		<guid isPermaLink="false">http://sylverio.com.br/blog/?p=952</guid>
		<description><![CDATA[Talvez o mais difícil de se trabalhar com múltiplas thread seja a o bloqueio de recursos, onde um recurso não pode ser manipulado por diversas threads simultaneamente ou em determinadas situações que se torna necessário inciar, pausar, retornar e abandonar &#8230;<p class="read-more"><a href="http://sylverio.com.br/blog/2012/02/gerenciando-threads/">Saiba mais &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Talvez o mais difícil de se trabalhar com múltiplas thread seja a o bloqueio de recursos, onde um recurso não pode ser manipulado por diversas threads simultaneamente ou em determinadas situações que se torna necessário inciar, pausar, retornar e abandonar uma thread manualmente. </p>
<p>O Framework .NET possui o objeto <em>Thread</em> que permite mais flexibilidade e gerenciamento sobre as thread executadas em background do que o objeto <em>ThreadPool</em>.</p>
<p><strong>Thread Priority</strong><br />
Uma das propriedades do objeto Thread á sua prioridade. Após a thread criada, mas antes de iniciar a thread, podemos definir a prioridade da thread com  propriedade <em>Thread.Priority</em> usando o enumerador <em>ThreadPriority</em>.<br />
A Thread priority controla como o sistema operacional irá agendar o tempo para a execução da Thread. Geralmente threads com maior prioridade rodam antes das threads com baixo prioridades, por padrão as threads tem o valor de prioridade definida como Normal.</p>
<p><strong>Thread State</strong><br />
Outra propriedade do objeto é <em>Thread.ThreadState</em> pode ser utilizada para verificar o estado das threads em background.<br />
Os estados possíveis são:</p>
<ul>
<li><strong>Unstarted</strong>: estado inicial da thread (antes de executar o método Thread.Start).</li>
<li><strong>Running</strong>: estado ativo ou executando (após de executar o método Thread.Start).</li>
<li><strong>Stopped</strong>: estado parada.</li>
<li><strong>WaitSleepJoin</strong>: estado esperando outra thread completar.</li>
<li><strong>SuspendRequested</strong>: estado repondendo solicitanção de pausa.</li>
<li><strong>Suspended</strong>: estado suspensa.</li>
<li><strong>AbortRequested</strong>: estado respondendo a solicitanção de abandono.</li>
<li><strong>Aborted</strong>: estado abortado.</li>
</ul>
<h3>Thread com parâmetros e retorno em C#</h3>
<p>Para fornecer parâmetros para uma thread, criamos uma classe com um construtor que recebe um ou mais parâmetros e armazena o dado e a usa para criar o objeto ThreadStart.<br />
Para obter o retorno da Thread, criamos um método que recebe o resultado de retorno como uma parâmetro. Depois criamos um delegate para o método e passamos o delegado e próprio método como parâmetro para a classe.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Threading</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">namespace</span> ManagerThread
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> Program
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> Main<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> args<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            Calculator calculator <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Calculator<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Multiplicador&quot;</span>, <span style="color: #FF0000;">15</span>, ResultCallback<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            Thread thread <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Thread<span style="color: #008000;">&#40;</span>calculator<span style="color: #008000;">.</span><span style="color: #0000FF;">Execute</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            thread<span style="color: #008000;">.</span><span style="color: #0000FF;">Start</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Main Thread aguarda finalização das threads em background.&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            thread<span style="color: #008000;">.</span><span style="color: #0000FF;">Join</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Thread completada.&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">ReadKey</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> ResultCallback<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> value<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Resultado: {0}&quot;</span>, value<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> Calculator
    <span style="color: #008000;">&#123;</span>
        <span style="color: #008080; font-style: italic;">// Delegate que define a assinatura do método de callback (retorno).</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">delegate</span> <span style="color: #6666cc; font-weight: bold;">void</span> ResultDelegate<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> value<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">readonly</span> ResultDelegate callback<span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">readonly</span> <span style="color: #6666cc; font-weight: bold;">string</span> message<span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">readonly</span> <span style="color: #6666cc; font-weight: bold;">int</span> value<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">public</span> Calculator<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> message, <span style="color: #6666cc; font-weight: bold;">int</span> value, ResultDelegate callback<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span><span style="color: #0000FF;">message</span> <span style="color: #008000;">=</span> message<span style="color: #008000;">;</span>
            <span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span><span style="color: #0000FF;">value</span> <span style="color: #008000;">=</span> value<span style="color: #008000;">;</span>
            <span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span><span style="color: #0000FF;">callback</span> <span style="color: #008000;">=</span> callback<span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">void</span> Execute<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span>message<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>callback <span style="color: #008000;">!=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                callback<span style="color: #008000;">&#40;</span>value<span style="color: #008000;">*</span><span style="color: #FF0000;">2</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>A thread é executada somente após o comando <em>thread.Start()</em>. O comando <em>thread.Join()</em> força a thread principal a ficar aguardando a finalização da thread em background para seguir o processo. </p>
<p><strong>Observações</strong>:<br />
Threads podem estar em mais de 1 estado ao mesmo tempo.<br />
Os métodos Thread.Suspend e Thread.Resume são utilizados para pausar e retornar a thread principal. Porem estes métos esta depreciados, e podem causar problemas de execuação, utilize o método Thread.Abort().</p>
<p>Enjoy <img src='http://sylverio.com.br/blog/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://sylverio.com.br/blog/2012/02/gerenciando-threads/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Garbage Collector (GC) &#8211; Gerenciamento de memória</title>
		<link>http://sylverio.com.br/blog/2010/01/garbage-collector-gc-gerenciamento-de-memoria/</link>
		<comments>http://sylverio.com.br/blog/2010/01/garbage-collector-gc-gerenciamento-de-memoria/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 13:25:37 +0000</pubDate>
		<dc:creator>Carlos Fernando Sylverio</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Framework.NET]]></category>

		<guid isPermaLink="false">http://sylverio.com.br/blog/?p=331</guid>
		<description><![CDATA[O Framework.NET trouxe alguns benefícios referentes a utilização e gerenciamento de memória, permitindo mais liberdade de alocação e remoção de variáveis na memória em ordem aleatória, executado por meio de uma gerência complexa do espaço ocupado e identificação dos espaços &#8230;<p class="read-more"><a href="http://sylverio.com.br/blog/2010/01/garbage-collector-gc-gerenciamento-de-memoria/">Saiba mais &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>O Framework.NET trouxe alguns benefícios referentes a utilização e gerenciamento de memória, permitindo mais liberdade de alocação e remoção de variáveis na memória em ordem aleatória,  executado por meio de uma gerência complexa do espaço ocupado e identificação dos espaços livres.<br />
Dessa forma vida de nós programadores se tornou muito mais fácil, pois não precisamos nos preocupar com o gerenciamento de memória (nada de malloc e free utilzados em C/C++), com isso temos menos erros relacionados ao vazamento de memória, bugs de ponteiros, entre outros.<br />
O principal componente que realiza esse gerenciamento e liberação de memória é o <strong>Garbage Collector</strong> (Coletor de Lixo ou GC) existente na arquitetura do <strong>Common Language Runtime</strong> (CLR) e tem como princípio atividade de funcionamento:</p>
<ol>
<li>Determinar quais objetos não mais será utilizado, ou seja, não estão mais acessíveis na aplicação;</li>
<li>Liberar os recursos (memória) utilizados por esses objetos</li>
</ol>
<h2>Entendendo o funcionamento do Garbage Collector</h2>
<p>Basicamente o GC divide a memória disponível em 3 áreas distintas:</p>
<ol>
<li>Maneged Heap</li>
<li>Pilha</li>
<li>Unmanaged Heap</li>
</ol>
<p>O GC em conjunto com a CLR por meio de diversos algoritmos executa o gerenciamento da área de memória managed heap, que aloca reference types.  Enquanto a pilha é utilizada para alocar value types. A unmanaged heap é utilizada para armazenar recursos não gerenciados de forma automática ou recursos nativos.<br />
Mais detalhe da arquitetura do GC ficará para um próximo post, pois irá envolver alguns temas ainda não tratados. </p>
<h2>Recursos Não Gerenciados</h2>
<p>Um ponto importante é controle de recursos não gerenciados (recursos nativos, que pode ser um arquivo, janela, conexões de banco de dados, sockets, Win32, entre outros).<br />
Implicitamente o Framework.NET mantém um controle das instâncias utilizadas pela aplicação, porem o mesmo não se repete para recursos não gerenciados. Para recursos não gerenciados deve-se fornecer uma maneira de liberar os recursos da memória depois que o aplicativo tiver terminado de usá-los, ou seja, deve ser um <em>processo manual (codificado) executado pelo programador</em>.<br />
Há duas maneiras de se finalizar um recurso não gerenciado:</p>
<ul>
<li>Implicitamente utilizando o método Finalize();</li>
<li>Explicitamente utilizando o método Dispose() do IDisposable;</li>
</ul>
<p><strong><em>Observação</em></strong>: Por padrão a Microsoft recomenda a implementar as duas formas de finalizar o objeto. Sendo que o método Finalize() serve de garantia de execução de liberação de memória impedindo que o recurso fique permanentemente vazando caso algum programador esqueça de chamar o método Dispose().<br />
<br />
A primeira impressão que temos ao ver o finalizador (redefinindo ao método Finalize de System.Object) existente no .NET é que este atua como um destruidor  (destructor)  presente em linguagens com C/C++  é que são similares. Porem não se iluda pela aparência, pois são bem diferentes em suas características.<br />
<br />
<strong><em>Caracteristicas do Finalizador:</em></strong><br />
</p>
<ul>
<li>Execução nem sempre é não garantida;</li>
<li>Execução não determinística (instante em que o método é executado não é conhecido);</li>
<li>Chamada ao método ocorre desde que não existam ciclos infinitos;</li>
<li>Quando chamado shutdown, sua execução só ocorre caso seu tempo de execução não seja superior a 2 segundos e o somatório não exceda 40 segundos (tempos aproximados);</li>
</ul>
<p>Em resumo <strong>o CLR não garante a ordem de chamada dos métodos Finalize()</strong>.</p>
<p><strong><em>Exemplo de implementação do finalize:</em></strong></p>
<p>Código C#.NET:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> AlgumaClasse
<span style="color: #008000;">&#123;</span>
   …
   ~AlgumaClasse<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008080; font-style: italic;">// finalizador</span>
   <span style="color: #008000;">&#123;</span>
      <span style="color: #008080; font-style: italic;">// código de limpeza</span>
   <span style="color: #008000;">&#125;</span>
   …
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Codigo gerado pelo compilador:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> AlgumaClasse
<span style="color: #008000;">&#123;</span>
   …
   <span style="color: #0600FF; font-weight: bold;">protected</span> <span style="color: #0600FF; font-weight: bold;">override</span> <span style="color: #6666cc; font-weight: bold;">void</span> Finalize<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
   <span style="color: #008000;">&#123;</span>
      <span style="color: #0600FF; font-weight: bold;">try</span> <span style="color: #008000;">&#123;</span> <span style="color: #008080; font-style: italic;">/* código de limpeza */</span> <span style="color: #008000;">&#125;</span>
      <span style="color: #0600FF; font-weight: bold;">finally</span> <span style="color: #008000;">&#123;</span> <span style="color: #0600FF; font-weight: bold;">base</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Finalize</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
   <span style="color: #008000;">&#125;</span>
   …
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>O método Dispose é uma implementação de um padrão conhecido como <strong><em>“padrão de descarte”</em></strong> e impõe uma ordem na vida de um objeto.<br />
O método Dispose() deve liberar os recursos que ele possui assim como os recursos de propriedade de seus tipos base. Esse processo é executado através de uma hierarquia de tipos de base, ou seja, cada objeto irá chamar o método Dispose() da classe estendida ou implementada. Garantindo assim que os recursos são sempre limpos adequadamente.<br />
Um característica particular do método Dispose() é que este pode ser chamado várias vezes sem lançar exceção.<br />
É importante salientar que não há benefícios de desempenho na utilização do método Dispose() a objetos gerenciados pela CLR (tais como Arrays). Este método deve ser utilizado em objetos que utilizam recursos nativos e objetos COM que são expostas ao Framework.NET, como exemplo podemos citar a classe FileStream que implementa a interface IDisposable.</p>
<p><strong><em>Exemplo de implementação do métiodo Dispose():</em></strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">// Design pattern para uma classe base.</span>
<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> <span style="color: #0600FF; font-weight: bold;">Base</span><span style="color: #008000;">:</span> IDisposable
<span style="color: #008000;">&#123;</span>
   <span style="color: #008080; font-style: italic;">//Implementação da interface IDisposable.</span>
   <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">void</span> Dispose<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> 
   <span style="color: #008000;">&#123;</span>
     Dispose<span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
      GC<span style="color: #008000;">.</span><span style="color: #0000FF;">SuppressFinalize</span><span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> 
   <span style="color: #008000;">&#125;</span>
&nbsp;
   <span style="color: #0600FF; font-weight: bold;">protected</span> <span style="color: #0600FF; font-weight: bold;">virtual</span> <span style="color: #6666cc; font-weight: bold;">void</span> Dispose<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">bool</span> disposing<span style="color: #008000;">&#41;</span> 
   <span style="color: #008000;">&#123;</span>
      <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>disposing<span style="color: #008000;">&#41;</span> 
      <span style="color: #008000;">&#123;</span>
         <span style="color: #008080; font-style: italic;">// libera outros estados (managed objects).</span>
      <span style="color: #008000;">&#125;</span>
      <span style="color: #008080; font-style: italic;">// Libera sus próprios estados(unmanaged objects).</span>
      <span style="color: #008080; font-style: italic;">// Define campos grandes como null.</span>
   <span style="color: #008000;">&#125;</span>
&nbsp;
   <span style="color: #008080; font-style: italic;">// Sintaxe para finalização do código.</span>
   ~<span style="color: #0600FF; font-weight: bold;">Base</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
   <span style="color: #008000;">&#123;</span>
      <span style="color: #008080; font-style: italic;">//Chamada simples Dispose(false).</span>
      Dispose <span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
   <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #008080; font-style: italic;">// Design pattern para a classe derived.</span>
<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> Derived<span style="color: #008000;">:</span> <span style="color: #0600FF; font-weight: bold;">Base</span>
<span style="color: #008000;">&#123;</span>   
   <span style="color: #0600FF; font-weight: bold;">protected</span> <span style="color: #0600FF; font-weight: bold;">override</span> <span style="color: #6666cc; font-weight: bold;">void</span> Dispose<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">bool</span> disposing<span style="color: #008000;">&#41;</span> 
   <span style="color: #008000;">&#123;</span>
      <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>disposing<span style="color: #008000;">&#41;</span> 
      <span style="color: #008000;">&#123;</span>
         <span style="color: #008080; font-style: italic;">// Liberação de recursos gerenciados</span>
      <span style="color: #008000;">&#125;</span>
      <span style="color: #008080; font-style: italic;">// Liberação de recusos não gerenciados.</span>
      <span style="color: #008080; font-style: italic;">// Define campos grandes como null.</span>
      <span style="color: #008080; font-style: italic;">// Chama Dispose da classe base.</span>
      <span style="color: #0600FF; font-weight: bold;">base</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Dispose</span><span style="color: #008000;">&#40;</span>disposing<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
   <span style="color: #008000;">&#125;</span>
   <span style="color: #008080; font-style: italic;">// A classe derived não tem o método Finalize</span>
   <span style="color: #008080; font-style: italic;">// ou um método Dispose com parametro pois herda da classe base.</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Enjoy <img src='http://sylverio.com.br/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://sylverio.com.br/blog/2010/01/garbage-collector-gc-gerenciamento-de-memoria/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comunicação via socket com C#</title>
		<link>http://sylverio.com.br/blog/2009/12/comunicacao-via-socket-com-c/</link>
		<comments>http://sylverio.com.br/blog/2009/12/comunicacao-via-socket-com-c/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 01:34:55 +0000</pubDate>
		<dc:creator>Carlos Fernando Sylverio</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Framework.NET]]></category>

		<guid isPermaLink="false">http://sylverio.com.br/blog/?p=271</guid>
		<description><![CDATA[Introdução Primeiramente vamos conceiturar o que é socket, ou soquete em portugues. De uma visão geral um soquete pode ser definido como uma tomada que designa uma cavidade ou região usada para ligar algum artifício específico. No mundo da computação, &#8230;<p class="read-more"><a href="http://sylverio.com.br/blog/2009/12/comunicacao-via-socket-com-c/">Saiba mais &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p><strong>Introdução</strong></p>
<p>Primeiramente vamos conceiturar o que é socket, ou soquete em portugues. De uma visão geral um soquete pode ser definido como uma tomada que designa uma cavidade ou região usada para ligar algum artifício específico.</p>
<p>No mundo da computação, um socket é o elo de ligação entre os processos do servidor e do cliente. Ele é a “porta” na qual os processos enviam e recebem mensagens. De acordo com JAMES F KUROSE: <em>“socket é a interface entre a camada de aplicação e a de transporte dentro de uma máquina”</em>. Para quem não lembra, ou não sabe, camada de aplicação e transporte fazem parte do <a href="http://pt.wikipedia.org/wiki/Modelo_OSI" target="_blanck">modelo OSI</a>.<br />
Através de um socket podemos estabelecer a comunicação entre máquinas possibilitando o envio e recebimento de dados.</p>
<p>A interface padronizada de sockets surgiu originalmente no sistema operacional Unix BSD (Berkeley Software Distribution). Tinha a função de suporte a comunicação em rede. Esta interface é a base para a maioria das interfaces entre protocolos de internet TCP/IP existente. </p>
<p>A identificação de um socket na rede é realizada por um IP e um porta. Comumente utiliza-se portas acima de 1000 pois as inferiores são utilizadas pelo sistema operacional. Sua comunicação é realizada pelos protocolos UDP ou TCP. Assim, é possível termos tanto comunicação orientada a conexão (via TCP), quanta não orientada a conexão (via UDP). O socket abstrai esse conceito, permitindo assim a utilização de qualquer um dos meios.</p>
<p>No C# para se trabalhar com sockets os recursos enconstram-se no namespace System.Net.Sockets. </p>
<p><strong>Implementando uma aplicação com socket</strong></p>
<p>Este é um simples código de uma aplicação Client/Server utilizando socket.<br />
Abaixo o passo a passo de criação da aplicação:</p>
<p><strong>Server App</strong></p>
<ol>
<li>Criar um projeto do tipo WindowsForm com o nome CommunicationSocket.</li>
<li>Incluir um botão que será utilizado para enviar mensagem do servidor para o cliente.</li>
</ol>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.IO</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Net</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Net.Sockets</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Threading</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Windows.Forms</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">namespace</span> CommunicationSocket
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">partial</span> <span style="color: #6666cc; font-weight: bold;">class</span> ServerApp <span style="color: #008000;">:</span> Form
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> Socket socket<span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> Thread thread<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> NetworkStream networkStream<span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> BinaryWriter binaryWriter<span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> BinaryReader binaryReader<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">public</span> ServerApp<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            InitializeComponent<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            thread <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Thread<span style="color: #008000;">&#40;</span><span style="color: #008000;">new</span> ThreadStart<span style="color: #008000;">&#40;</span>RunServer<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            thread<span style="color: #008000;">.</span><span style="color: #0000FF;">Start</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">void</span> RunServer<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            TcpListener tcpListener<span style="color: #008000;">;</span>
            <span style="color: #0600FF; font-weight: bold;">try</span>
            <span style="color: #008000;">&#123;</span>
                IPEndPoint ipEndPoint <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> IPEndPoint<span style="color: #008000;">&#40;</span>IPAddress<span style="color: #008000;">.</span><span style="color: #0000FF;">Parse</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;127.0.0.1&quot;</span><span style="color: #008000;">&#41;</span>, <span style="color: #FF0000;">2001</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                tcpListener <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> TcpListener<span style="color: #008000;">&#40;</span>ipEndPoint<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                tcpListener<span style="color: #008000;">.</span><span style="color: #0000FF;">Start</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                MessageBox<span style="color: #008000;">.</span><span style="color: #0000FF;">Show</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Servidor habilitado e escutando porta...&quot;</span>, <span style="color: #666666;">&quot;Server App&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                socket <span style="color: #008000;">=</span> tcpListener<span style="color: #008000;">.</span><span style="color: #0000FF;">AcceptSocket</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                networkStream <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> NetworkStream<span style="color: #008000;">&#40;</span>socket<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                binaryWriter <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> BinaryWriter<span style="color: #008000;">&#40;</span>networkStream<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                binaryReader <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> BinaryReader<span style="color: #008000;">&#40;</span>networkStream<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                MessageBox<span style="color: #008000;">.</span><span style="color: #0000FF;">Show</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;conexão recebida!&quot;</span>, <span style="color: #666666;">&quot;Server App&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                binaryWriter<span style="color: #008000;">.</span><span style="color: #0000FF;">Write</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;<span style="color: #008080; font-weight: bold;">\n</span>conexão efetuada!&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #6666cc; font-weight: bold;">string</span> messageReceived <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF; font-weight: bold;">do</span> 
                <span style="color: #008000;">&#123;</span>
                    messageReceived <span style="color: #008000;">=</span> binaryReader<span style="color: #008000;">.</span><span style="color: #0000FF;">ReadString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    MessageBox<span style="color: #008000;">.</span><span style="color: #0000FF;">Show</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Mensagem: &quot;</span> <span style="color: #008000;">+</span> messageReceived, <span style="color: #666666;">&quot;Server App&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #008000;">&#125;</span> <span style="color: #0600FF; font-weight: bold;">while</span> <span style="color: #008000;">&#40;</span>socket<span style="color: #008000;">.</span><span style="color: #0000FF;">Connected</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span> 
            <span style="color: #0600FF; font-weight: bold;">catch</span> <span style="color: #008000;">&#40;</span>Exception ex<span style="color: #008000;">&#41;</span> 
            <span style="color: #008000;">&#123;</span>
                MessageBox<span style="color: #008000;">.</span><span style="color: #0000FF;">Show</span><span style="color: #008000;">&#40;</span>ex<span style="color: #008000;">.</span><span style="color: #0000FF;">Message</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span> 
            <span style="color: #0600FF; font-weight: bold;">finally</span> 
            <span style="color: #008000;">&#123;</span>
                binaryReader<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                binaryWriter<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                networkStream<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                socket<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                MessageBox<span style="color: #008000;">.</span><span style="color: #0000FF;">Show</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;conexão finalizada&quot;</span>, <span style="color: #666666;">&quot;Server App&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> btnSendMsg_Click<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> sender, EventArgs e<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #0600FF; font-weight: bold;">try</span>
            <span style="color: #008000;">&#123;</span>
                binaryWriter<span style="color: #008000;">.</span><span style="color: #0000FF;">Write</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Server respondendo: Houston, we have a problem!!!&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0600FF; font-weight: bold;">catch</span> <span style="color: #008000;">&#40;</span>SocketException socketEx<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                MessageBox<span style="color: #008000;">.</span><span style="color: #0000FF;">Show</span><span style="color: #008000;">&#40;</span>socketEx<span style="color: #008000;">.</span><span style="color: #0000FF;">Message</span>, <span style="color: #666666;">&quot;Erro&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p><strong>Client App</strong></p>
<ol>
<li>Criar um projeto do tipo WindowsForm com o nome ClientApp.</li>
<li>Incluir botão que será utilizado para enviar mensagem do cliente para o servidor.</li>
</ol>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.IO</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Net.Sockets</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Threading</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Windows.Forms</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">namespace</span> ClientApplication 
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">partial</span> <span style="color: #6666cc; font-weight: bold;">class</span> ClientAppForm <span style="color: #008000;">:</span> Form 
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> NetworkStream networkStream<span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> BinaryWriter binaryWriter<span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> BinaryReader binaryReader<span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> TcpClient tcpClient<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> Thread thread<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">public</span> ClientAppForm<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> 
        <span style="color: #008000;">&#123;</span>
            InitializeComponent<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            thread <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Thread<span style="color: #008000;">&#40;</span><span style="color: #008000;">new</span> ThreadStart<span style="color: #008000;">&#40;</span>RunClient<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            thread<span style="color: #008000;">.</span><span style="color: #0000FF;">Start</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">void</span> RunClient<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> 
        <span style="color: #008000;">&#123;</span>
            <span style="color: #0600FF; font-weight: bold;">try</span> 
            <span style="color: #008000;">&#123;</span>
                tcpClient <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> TcpClient<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                tcpClient<span style="color: #008000;">.</span><span style="color: #0000FF;">Connect</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;127.0.0.1&quot;</span>, <span style="color: #FF0000;">2001</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                networkStream <span style="color: #008000;">=</span> tcpClient<span style="color: #008000;">.</span><span style="color: #0000FF;">GetStream</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                binaryWriter <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> BinaryWriter<span style="color: #008000;">&#40;</span>networkStream<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                binaryReader <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> BinaryReader<span style="color: #008000;">&#40;</span>networkStream<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #6666cc; font-weight: bold;">String</span> message <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF; font-weight: bold;">do</span> 
                <span style="color: #008000;">&#123;</span>
                    <span style="color: #0600FF; font-weight: bold;">try</span> 
                    <span style="color: #008000;">&#123;</span>
                        message <span style="color: #008000;">=</span> binaryReader<span style="color: #008000;">.</span><span style="color: #0000FF;">ReadString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                        MessageBox<span style="color: #008000;">.</span><span style="color: #0000FF;">Show</span><span style="color: #008000;">&#40;</span>message, <span style="color: #666666;">&quot;Mensagem Recebida&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    <span style="color: #008000;">&#125;</span> 
                    <span style="color: #0600FF; font-weight: bold;">catch</span> <span style="color: #008000;">&#40;</span>Exception ex<span style="color: #008000;">&#41;</span> 
                    <span style="color: #008000;">&#123;</span>
                        MessageBox<span style="color: #008000;">.</span><span style="color: #0000FF;">Show</span><span style="color: #008000;">&#40;</span>ex<span style="color: #008000;">.</span><span style="color: #0000FF;">Message</span>, <span style="color: #666666;">&quot;Erro&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                        message <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;FIM&quot;</span><span style="color: #008000;">;</span>
                    <span style="color: #008000;">&#125;</span>
                <span style="color: #008000;">&#125;</span> <span style="color: #0600FF; font-weight: bold;">while</span> <span style="color: #008000;">&#40;</span>message <span style="color: #008000;">!=</span> <span style="color: #666666;">&quot;FIM&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                binaryWriter<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                binaryReader<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                networkStream<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                tcpClient<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span> 
            <span style="color: #0600FF; font-weight: bold;">catch</span> <span style="color: #008000;">&#40;</span>Exception ex<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                MessageBox<span style="color: #008000;">.</span><span style="color: #0000FF;">Show</span><span style="color: #008000;">&#40;</span>ex<span style="color: #008000;">.</span><span style="color: #0000FF;">Message</span>, <span style="color: #666666;">&quot;Erro&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> btnSendMsg_Click<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> sender, EventArgs e<span style="color: #008000;">&#41;</span> 
        <span style="color: #008000;">&#123;</span>
            <span style="color: #0600FF; font-weight: bold;">try</span> 
            <span style="color: #008000;">&#123;</span>
                binaryWriter<span style="color: #008000;">.</span><span style="color: #0000FF;">Write</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Mensagem do cliente&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span> 
            <span style="color: #0600FF; font-weight: bold;">catch</span> <span style="color: #008000;">&#40;</span>SocketException socketEx<span style="color: #008000;">&#41;</span> 
            <span style="color: #008000;">&#123;</span>
                MessageBox<span style="color: #008000;">.</span><span style="color: #0000FF;">Show</span><span style="color: #008000;">&#40;</span>socketEx<span style="color: #008000;">.</span><span style="color: #0000FF;">Message</span>, <span style="color: #666666;">&quot;Erro&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Para realizar a comunicação o Servidor utiliza o objeto TcpListener que fica escutando toda requisição no IP &#8220;127.0.0.1&#8243; porta 2001.<br />
Na aplicação Cliente o objeto TcpClient é informado sobre o IP (ou DNS) e porta do servidor que irá se conectar. Após esse a realização toda a comunicação é feita por meio de stream através do objeto NetworkStream.</p>
<p>Repare que tanto Servidor quanto o Cliente trabalha com processamento em paralelo (Thread) para evitar que a aplicação fique travada até o término do processamento, ou para manter um processamento dedicado e contínuo que é o caso do servidor.</p>
<p>Nesse exemplo utilizei MessageBox para apresentar as mensagens, pois para inseri-las em um TextBox no Form é necessário utilizar delegates e reflections, senão teremos um erro de cruzamento de Threads (<em>Cross-thread operation not valid</em>).<br />
Mas isso acho que é assunto para o nosso próximo post.</p>
<p>Até mais <img src='http://sylverio.com.br/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://sylverio.com.br/blog/2009/12/comunicacao-via-socket-com-c/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Extension Methods no C# 3.0</title>
		<link>http://sylverio.com.br/blog/2009/12/extension-methods-no-c-3-0/</link>
		<comments>http://sylverio.com.br/blog/2009/12/extension-methods-no-c-3-0/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 00:36:44 +0000</pubDate>
		<dc:creator>Carlos Fernando Sylverio</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Framework.NET]]></category>

		<guid isPermaLink="false">http://sylverio.com.br/blog/?p=328</guid>
		<description><![CDATA[Extension Methods é uma das muitas características que torna o LINQ possível . Em resumo podemos dizer que Extension Methods é a possibilidade de inserir métodos em objetos já compilados. O método criado tem a característica de um método estático, &#8230;<p class="read-more"><a href="http://sylverio.com.br/blog/2009/12/extension-methods-no-c-3-0/">Saiba mais &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p><strong>Extension Methods</strong> é uma das muitas características que torna o <em>LINQ</em> possível .<br />
Em resumo podemos dizer que <em>Extension Methods</em> é a possibilidade de inserir métodos em objetos já compilados. O método criado tem a característica de um método estático, porem só está acessível ao objeto associado.<br />
Com esse recurso podemos adicionar aos .NET types novos métodos. Assim classes como  StringHelpers, Util, entre outras, com uma variedade de métodos de auxílio, podem ser inseridos diretamente no fonte.<br />
Exemplo de uma classe com validação:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Text.RegularExpressions</span><span style="color: #008000;">;</span> 
<span style="color: #0600FF; font-weight: bold;">namespace</span> ExtensionMethodsExample
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> Util
    <span style="color: #008000;">&#123;</span>
        <span style="color: #008080; font-style: italic;">/// &lt;summary&gt;Verifica se o argumento do tipo string é um numérico&lt;/summary&gt;</span>
        <span style="color: #008080; font-style: italic;">/// &lt;param name=&quot;arg&quot;&gt;argumento a ser validado&lt;/param&gt;</span>
        <span style="color: #008080; font-style: italic;">/// &lt;returns&gt;True - se for numérico&lt;/returns&gt;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">bool</span> IsNumeric<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> arg<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #0600FF; font-weight: bold;">return</span> Regex<span style="color: #008000;">.</span><span style="color: #0000FF;">IsMatch</span><span style="color: #008000;">&#40;</span>arg, <span style="color: #666666;">@&quot;^\d+$&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Com o uso do <em>Extension Methods</em> podemos inserir o método que verifica se a variável é numérica no próprio tipo string.<br />
Abaixo um exemplo de seu uso, e depois vou explicar como o <em>extension methods</em> é declarado.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Text.RegularExpressions</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">namespace</span> ExtensionMethodsExample
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">class</span> Extensions
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">bool</span> IsNumeric<span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">this</span> <span style="color: #6666cc; font-weight: bold;">string</span> arg<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
             <span style="color: #0600FF; font-weight: bold;">return</span> Regex<span style="color: #008000;">.</span><span style="color: #0000FF;">IsMatch</span><span style="color: #008000;">&#40;</span>arg, <span style="color: #666666;">@&quot;^\d+$&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span> 
&nbsp;
<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> Program
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> Main<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> args<span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        <span style="color: #6666cc; font-weight: bold;">string</span> codigo1 <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;1234&quot;</span><span style="color: #008000;">;</span>
        <span style="color: #6666cc; font-weight: bold;">string</span> codigo2 <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;ABCD&quot;</span><span style="color: #008000;">;</span>
&nbsp;
        Imprime<span style="color: #008000;">&#40;</span>codigo1<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        Imprime<span style="color: #008000;">&#40;</span>codigo2<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> Imprime<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> codigo<span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>codigo<span style="color: #008000;">.</span><span style="color: #0000FF;">IsNumeric</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Codigo numerico: {0}&quot;</span>, codigo<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
        <span style="color: #0600FF; font-weight: bold;">else</span>
        <span style="color: #008000;">&#123;</span>
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Codigo alphanumerico: {0}&quot;</span>, codigo<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Para criarmos um <em>extension methods</em> precisamos de uma classe e método estático. Todo método extension sempre terá seu primeiro parâmetro a palavra reservada this, seguido do tipo ao qual o método será inserido, no exemplo o tipo string. Esse parâmetro representa a própria instância do objeto. Para os parâmetros subseqüentes serão utilizados na chamada do método. O nome da classe é de livre escolha, ela não interfere na implementação do extension methods, a única ressalva é que seja uma classe estática.</p>
<p>Compare a diferença da verificação de condição utilizando a classe Util e o extension methods</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;">Util util <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Util<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>util<span style="color: #008000;">.</span><span style="color: #0000FF;">IsNumeric</span><span style="color: #008000;">&#40;</span>codigo<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #008080; font-style: italic;">// faz algo</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>e</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>codigo<span style="color: #008000;">.</span><span style="color: #0000FF;">IsNumeric</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #008080; font-style: italic;">// faz algo</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>O código torna-se mais legível e mais implícito seus métodos, tornando a linguagem muito mais dinâmica.<br />
Enjoy <img src='http://sylverio.com.br/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://sylverio.com.br/blog/2009/12/extension-methods-no-c-3-0/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Utilizando Reflection com C#</title>
		<link>http://sylverio.com.br/blog/2009/11/utilizando-reflection-com-c/</link>
		<comments>http://sylverio.com.br/blog/2009/11/utilizando-reflection-com-c/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 00:53:40 +0000</pubDate>
		<dc:creator>Carlos Fernando Sylverio</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Framework.NET]]></category>

		<guid isPermaLink="false">http://sylverio.com.br/blog/?p=293</guid>
		<description><![CDATA[Entre as utilização de reflection podemos citar a instânciação de classes ou a utilização de plugins (como os utilizados no firefox), que são definidos em tempo de execução. Basicamente reflection é uma maneira de se descobrir dados de uma classe/objeto/interface &#8230;<p class="read-more"><a href="http://sylverio.com.br/blog/2009/11/utilizando-reflection-com-c/">Saiba mais &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Entre as utilização de reflection podemos citar a instânciação de classes ou a utilização de plugins (como os utilizados no firefox), que são definidos em tempo de execução.</p>
<p>Basicamente reflection é uma maneira de se descobrir dados de uma classe/objeto/interface em tempo de execução. Dessa forma podemos examinar os tipos em um assembly e interagir com eles ou instanciá-los. Também podemos criar tipos no momento de execução.</p>
<p>Neste post criarei um exemplo de instânciar objetos em tempo de execução (<em>runtime</em>) utilizando reflection.<br />
Abaixo segue um diagrama de classe do modelo utilizado para o exemplo:</p>
<p><img src="image/modelo_produto_reflection.PNG" alt="modelo produto" /></p>
<p><strong>Utilizando reflection</strong></p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Collections.Generic</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Reflection</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">namespace</span> UtilizandoReflection <span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> Program <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> Main<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> args<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
&nbsp;
            StateFactory factory <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> StateFactory<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// Cria 3 produtos em estado diferentes</span>
            Product product1 <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Product<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            Product product2 <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Product<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            Product product3 <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Product<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            product1<span style="color: #008000;">.</span><span style="color: #0000FF;">State</span> <span style="color: #008000;">=</span> factory<span style="color: #008000;">.</span><span style="color: #0000FF;">Create</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">1</span>, <span style="color: #666666;">&quot;item pendente&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            product2<span style="color: #008000;">.</span><span style="color: #0000FF;">State</span> <span style="color: #008000;">=</span> factory<span style="color: #008000;">.</span><span style="color: #0000FF;">Create</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">2</span>, <span style="color: #666666;">&quot;item no estoque&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            product3<span style="color: #008000;">.</span><span style="color: #0000FF;">State</span> <span style="color: #008000;">=</span> factory<span style="color: #008000;">.</span><span style="color: #0000FF;">Create</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">3</span>, <span style="color: #666666;">&quot;item vendido&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Produto {0}: {1} -- Type {2}&quot;</span>, product1<span style="color: #008000;">.</span><span style="color: #0000FF;">State</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ID</span>, product1<span style="color: #008000;">.</span><span style="color: #0000FF;">State</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Description</span>, product1<span style="color: #008000;">.</span><span style="color: #0000FF;">State</span><span style="color: #008000;">.</span><span style="color: #0000FF;">GetType</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Produto {0}: {1} -- Type {2}&quot;</span>, product2<span style="color: #008000;">.</span><span style="color: #0000FF;">State</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ID</span>, product2<span style="color: #008000;">.</span><span style="color: #0000FF;">State</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Description</span>, product2<span style="color: #008000;">.</span><span style="color: #0000FF;">State</span><span style="color: #008000;">.</span><span style="color: #0000FF;">GetType</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Produto {0}: {1} -- Type {2}&quot;</span>, product3<span style="color: #008000;">.</span><span style="color: #0000FF;">State</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ID</span>, product3<span style="color: #008000;">.</span><span style="color: #0000FF;">State</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Description</span>, product3<span style="color: #008000;">.</span><span style="color: #0000FF;">State</span><span style="color: #008000;">.</span><span style="color: #0000FF;">GetType</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">/// &lt;summary&gt;Classe responsável por criar intâncias de estado&lt;/summary&gt;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> StateFactory <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> Dictionary<span style="color: #008000;">&lt;</span><span style="color: #6666cc; font-weight: bold;">int</span>, <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&gt;</span> states<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">public</span> StateFactory<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
            states <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Dictionary<span style="color: #008000;">&lt;</span><span style="color: #6666cc; font-weight: bold;">int</span>, <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">3</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            states<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">1</span>, <span style="color: #666666;">&quot;Pending&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            states<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">2</span>, <span style="color: #666666;">&quot;Stock&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            states<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">3</span>, <span style="color: #666666;">&quot;Sold&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">/// &lt;summary&gt;Cria uma instância de estado&lt;/summary&gt;</span>
        <span style="color: #008080; font-style: italic;">/// &lt;param name=&quot;ID&quot;&gt;Identificador da instância&lt;/param&gt;</span>
        <span style="color: #008080; font-style: italic;">/// &lt;param name=&quot;description&quot;&gt;descrição do estado&lt;/param&gt;</span>
        <span style="color: #008080; font-style: italic;">/// &lt;returns&gt;Estado&lt;/returns&gt;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> State Create<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> ID, <span style="color: #6666cc; font-weight: bold;">string</span> description<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
&nbsp;
            <span style="color: #6666cc; font-weight: bold;">string</span> baseName <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;UtilizandoReflection&quot;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// cria array com os parâmetro utilizado no construtor do estado</span>
            <span style="color: #6666cc; font-weight: bold;">object</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> args <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #6666cc; font-weight: bold;">object</span><span style="color: #008000;">&#91;</span><span style="color: #FF0000;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span>
            args<span style="color: #008000;">.</span><span style="color: #0000FF;">SetValue</span><span style="color: #008000;">&#40;</span>ID, <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            args<span style="color: #008000;">.</span><span style="color: #0000FF;">SetValue</span><span style="color: #008000;">&#40;</span>description, <span style="color: #FF0000;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">//using System.Reflection</span>
            Assembly assembly <span style="color: #008000;">=</span> Assembly<span style="color: #008000;">.</span><span style="color: #0000FF;">Load</span><span style="color: #008000;">&#40;</span>baseName<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #008000;">&#40;</span>State<span style="color: #008000;">&#41;</span>assembly<span style="color: #008000;">.</span><span style="color: #0000FF;">CreateInstance</span><span style="color: #008000;">&#40;</span>baseName <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;.&quot;</span> <span style="color: #008000;">+</span> states<span style="color: #008000;">&#91;</span>ID<span style="color: #008000;">&#93;</span>, <span style="color: #0600FF; font-weight: bold;">true</span>, BindingFlags<span style="color: #008000;">.</span><span style="color: #0000FF;">CreateInstance</span>, <span style="color: #0600FF; font-weight: bold;">null</span>, args, <span style="color: #0600FF; font-weight: bold;">null</span>, <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #008080;">#region Domain</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> Product <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> State State<span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> abstract <span style="color: #6666cc; font-weight: bold;">class</span> State <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">int</span> ID<span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">string</span> Description<span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> State<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> ID, <span style="color: #6666cc; font-weight: bold;">string</span> description<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
            <span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ID</span> <span style="color: #008000;">=</span> ID<span style="color: #008000;">;</span>
            <span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Description</span> <span style="color: #008000;">=</span> description<span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> Pending <span style="color: #008000;">:</span> State <span style="color: #008000;">&#123;</span> <span style="color: #008080; font-style: italic;">// estado pendente</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> Pending<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> ID, <span style="color: #6666cc; font-weight: bold;">string</span> description<span style="color: #008000;">&#41;</span> <span style="color: #008000;">:</span> <span style="color: #0600FF; font-weight: bold;">base</span><span style="color: #008000;">&#40;</span>ID, description<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> Stock <span style="color: #008000;">:</span> State <span style="color: #008000;">&#123;</span> <span style="color: #008080; font-style: italic;">// estado estoque</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> Stock<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> ID, <span style="color: #6666cc; font-weight: bold;">string</span> description<span style="color: #008000;">&#41;</span> <span style="color: #008000;">:</span> <span style="color: #0600FF; font-weight: bold;">base</span><span style="color: #008000;">&#40;</span>ID, description<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> Sold <span style="color: #008000;">:</span> State <span style="color: #008000;">&#123;</span> <span style="color: #008080; font-style: italic;">// estado vendido</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> Sold<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> ID, <span style="color: #6666cc; font-weight: bold;">string</span> description<span style="color: #008000;">&#41;</span> <span style="color: #008000;">:</span> <span style="color: #0600FF; font-weight: bold;">base</span><span style="color: #008000;">&#40;</span>ID, description<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #008080;">#endregion</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Resultado da execução:<br />
<code><br />
Produto 1: item pendente -- Type UtilizandoReflection.Pending<br />
Produto 2: item no estoque -- Type UtilizandoReflection.Stock<br />
Produto 3: item vendido -- Type UtilizandoReflection.Sold<br />
</code></p>
<p>Observe que as classes a serem instanciadas por reflection estão na mesma solution ou project, assim utilizamos o método Load do Assembly, porem quando a classe a ser utilizada for de uma DLL, utilizamos o método LoadFile e informamos o nome completo da DLL.</p>
<p>Como mencionado no início do post, há outras utilizações de reflection, como manipular atributos e métodos, mas isso é assunto para um próximo post.</p>
<p>Enjoy <img src='http://sylverio.com.br/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://sylverio.com.br/blog/2009/11/utilizando-reflection-com-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Expressão Regular</title>
		<link>http://sylverio.com.br/blog/2009/02/expressao-regular/</link>
		<comments>http://sylverio.com.br/blog/2009/02/expressao-regular/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 04:23:22 +0000</pubDate>
		<dc:creator>Carlos Fernando Sylverio</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Framework.NET]]></category>
		<category><![CDATA[Regular Expression]]></category>

		<guid isPermaLink="false">http://sylverio.com.br/blog/?p=54</guid>
		<description><![CDATA[Expressão Regular é um padrão de combinação de caracteres que é parte de diversas linguagens de programação modernas. Com a expressão regular podemos criar padrões para filtrar ou validar uma string de entrada através de uma expressão válida. Alguns caracteres &#8230;<p class="read-more"><a href="http://sylverio.com.br/blog/2009/02/expressao-regular/">Saiba mais &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p><strong>Expressão Regular</strong> é um padrão de combinação de caracteres que é parte de diversas linguagens de programação modernas. Com a expressão regular podemos criar padrões para filtrar ou validar uma string de entrada através de uma expressão válida.</p>
<p>Alguns caracteres na expressão regular que têm funções especiais, e recebem o nome de <strong>metacaracteres</strong>, a combinação desses símbolos com caracteres literais da-se a criação de expressão.</p>
<p>Com a expressão regular é possível validar padrões de escrita como:</p>
<ul>
<li>Número IP</li>
<li>E-mail</li>
<li>CPF</li>
</ul>
<p></ br></p>
<p>Para aprender a sintaxe utilizada na criação da expressão regular, segue uma versão on-line da obra de <a href="http://guia-er.sourceforge.net/" target="_blank">Expressões Regulares &#8211; Guia de Consulta Rápida</a>.</p>
<p><em>OBSERVAÇÕES:</em></p>
<p>Em Java suporte a expressões regulares tem sido parte da plataforma Java desde a versão 1.4. e está contidas no pacote java.util.regex .</p>
<p>EM C# para utilizar expressões regulares, precisamos incluir o namespace System.Text.RegularExpressions .</p>
<p><strong>Exemplo de expressão regulares com C#</strong></p>
<p>Para testar a utilização de expressão regular, criei um projeto do tipo Console Application, e inclui o seguinte código.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> Main<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> args<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #008080; font-style: italic;">// expressões para filtrar as palavras a serem apresentadas</span>
            <span style="color: #008080; font-style: italic;">// cria padrão para todas as palavras que contenham a expressão ATO</span>
            <span style="color: #6666cc; font-weight: bold;">string</span> padrao1 <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;.ato&quot;</span><span style="color: #008000;">;</span>
            <span style="color: #008080; font-style: italic;">// cria padrão para todas as palavras que contenham caracteres especias</span>
            <span style="color: #6666cc; font-weight: bold;">string</span> padrao2 <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;.<span style="color: #008080; font-weight: bold;">\\</span>?|.<span style="color: #008080; font-weight: bold;">\\</span>+|.<span style="color: #008080; font-weight: bold;">\\</span>!&quot;</span><span style="color: #008000;">;</span>
            <span style="color: #008080; font-style: italic;">// cria padrão para todas as palavras que contenham caracteres numéricos</span>
            <span style="color: #6666cc; font-weight: bold;">string</span> padrao3 <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;[0-9]&quot;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// cara lista para armazenar as palavras a serem filtradas</span>
            List<span style="color: #008000;">&lt;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&gt;</span> paravras <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> List<span style="color: #008000;">&lt;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">10</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            paravras<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;9pato&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            paravras<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;rat3o&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            paravras<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;mato&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            paravras<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;gato&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            paravras<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;te5to&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            paravras<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;ramo&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            paravras<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;duv6ida?&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            paravras<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;soma+&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            paravras<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;opa?&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            paravras<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;que!&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// Cria objetos que representa uma expressão regular</span>
            Regex regex1 <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Regex<span style="color: #008000;">&#40;</span>padrao1<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Busca de palavras com o padrão ATO&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">foreach</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> str <span style="color: #0600FF; font-weight: bold;">in</span> paravras<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                <span style="color: #008080; font-style: italic;">// verifica se palavra esta de acordo com o padrão</span>
                <span style="color: #008080; font-style: italic;">// se for verdadeiro entra dentro do laço</span>
                <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>regex1<span style="color: #008000;">.</span><span style="color: #0000FF;">IsMatch</span><span style="color: #008000;">&#40;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                    Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #008000;">&#125;</span>
            <span style="color: #008000;">&#125;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// Cria objetos que representa uma expressão regular</span>
            Regex regex2 <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Regex<span style="color: #008000;">&#40;</span>padrao2<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Busca de palavras com caracteres especias&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">foreach</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> str <span style="color: #0600FF; font-weight: bold;">in</span> paravras<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>regex2<span style="color: #008000;">.</span><span style="color: #0000FF;">IsMatch</span><span style="color: #008000;">&#40;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                    Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #008000;">&#125;</span>
            <span style="color: #008000;">&#125;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// Cria objetos que representa uma expressão regular</span>
            Regex regex3 <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Regex<span style="color: #008000;">&#40;</span>padrao3<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Busca de palavras que contenham o caracteres numericos&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">foreach</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> str <span style="color: #0600FF; font-weight: bold;">in</span> paravras<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>regex3<span style="color: #008000;">.</span><span style="color: #0000FF;">IsMatch</span><span style="color: #008000;">&#40;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                    Console<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteLine</span><span style="color: #008000;">&#40;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #008000;">&#125;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Até mais&#8230; <img src='http://sylverio.com.br/blog/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://sylverio.com.br/blog/2009/02/expressao-regular/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

