<?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>Diário de Códigos &#187; C# Linguagem</title>
	<atom:link href="http://diariodecodigos.info/category/net/csharp/feed/" rel="self" type="application/rss+xml" />
	<link>http://diariodecodigos.info</link>
	<description>Codigos Fonte, Artigos e Dicas</description>
	<lastBuildDate>Wed, 11 Apr 2012 18:56:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Classes de Coleção + Queue e Stack</title>
		<link>http://diariodecodigos.info/2009/10/classes-de-colecao-queue-e-stack/</link>
		<comments>http://diariodecodigos.info/2009/10/classes-de-colecao-queue-e-stack/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 00:06:23 +0000</pubDate>
		<dc:creator>Alexandre Santos</dc:creator>
				<category><![CDATA[C# Linguagem]]></category>
		<category><![CDATA[Array]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[collection]]></category>

		<guid isPermaLink="false">http://diariodecodigos.info/?p=626</guid>
		<description><![CDATA[Nesse post apredemos a utilizar as Classes Queue e Stack]]></description>
			<content:encoded><![CDATA[<p><a rel="attachment wp-att-482" href="http://diariodecodigos.info/2009/09/mudanca-de-planos/c-2/"><img class="aligncenter size-full wp-image-482" title="C#" src="http://diariodecodigos.info/wp-content/uploads/2009/09/C.png" alt="C#" width="550" height="57" /></a></p>
<p>Já vimos diversos tipos de Array a já aprendemos o que são Classes de Coleção, se você não viu ou não conhece procure nos Posts Relacionados no final da página.</p>
<p>Hoje vamos ver a Classe de Coleção <strong>Queue</strong> e <strong>Stack</strong>.</p>
<p><span id="more-626"></span><br />
<h2>Queue</h2>
<p>Essa classe utiliza o famoso conceito <em>FIFO</em> (First-in, First-out: primeiro a entrar, primeira a sair).</p>
<p>Imagine 3 potes vc enche o <em><strong>pote 1</strong></em>, o <strong><em>pote 2</em></strong> e o <em><strong>pote 3</strong></em>, o<em><strong> pote 1</strong></em> foi o primeiro a ser preenchido, agora você vai esvaziar o <strong><em>pote 1</em></strong> depois o <strong><em>pote 2</em></strong> e em seguida o <strong><em>pote 3</em></strong>. Pronto!</p>
<pre class="brush: csharp;">
using System;
using System.Collections;

// instânciamos uma nova fila
 Queue novaFilaN = new Queue();

 // Criamos um array com valores
 int[] nums = new int[]{2, 4, 6, 7, 8, 9};

 // inserimos valores na fila
 foreach (int numeros in nums)
 {
     novaFilaN.Enqueue(numeros);
     Console.WriteLine(numeros + &amp;amp;quot;&amp;amp;lt;- Enfileramos\n&amp;amp;quot;);
 }

 Console.WriteLine(&amp;amp;quot;\n Nossa Fila está assim: &amp;amp;quot;);

 // percorremos a fila
 foreach (int num in novaFilaN)
 {
     Console.WriteLine(num);
 }

 Console.WriteLine(&amp;amp;quot;\n --- Agora vamos retirar os valores da fila --- \n&amp;amp;quot;);
 // esvaziamos a fila

 while (novaFilaN.Count &amp;amp;gt; 0)
 {
     int number = (int)novaFilaN.Dequeue();
         /** O casting é nesessário pois a Classe de Coleção Queue
          *  é uma classe Generalizada e armazena os valores como object
          *  OBS: Não confundam classes Generalizadas com classes Genéricas
          */
     Console.WriteLine(number + &amp;amp;quot; &amp;amp;lt;- Retiramos &amp;amp;quot;);
 }
</pre>
<p>A saída vai ser essa:</p>
<p><a href="http://diariodecodigos.info/wp-content/uploads/2009/10/Queue1.jpg"><img class="aligncenter size-full wp-image-630" title="Queue" src="http://diariodecodigos.info/wp-content/uploads/2009/10/Queue1.jpg" alt="Queue" width="385" height="359" /></a></p>
<h2>Stack</h2>
<p>A classe Stack implementa o mecanismo LIFO (Last-In, First-Out, último a entrar é o primeiro a sair).</p>
<p>É como uma pilha de pratos, o último prato colocado é o primeiro a ser retirado da pilha =D</p>
<pre class="brush: csharp;">
Stack pilha = new Stack();

 int[] numeros = new int[] { 2, 4, 6, 7, 8, 9 };

 foreach (int num in numeros)
 {
pilha.Push(num);
Console.WriteLine(num + &amp;amp;quot; &amp;amp;lt;- empilhamos\n&amp;amp;quot;);
 }

 Console.WriteLine(&amp;amp;quot;\n Nossa Pilha está assim: &amp;amp;quot;);

 // percorremos a pilha
 foreach (int numbs in pilha)
 {
Console.WriteLine(numbs);
 }

 Console.WriteLine(&amp;amp;quot;\n --- Agora vamos retirar os valores da fila --- \n&amp;amp;quot;);

 //esvaziamos a pilha
 while (pilha.Count &amp;amp;gt; 0)
 {
int number = (int)pilha.Pop();
Console.WriteLine(number + &amp;amp;quot; &amp;amp;lt;- Retiramos da Pilha&amp;amp;quot;);
 }
</pre>
<p>A saída será essa:</p>
<p><a href="http://diariodecodigos.info/wp-content/uploads/2009/10/stack.png"><img class="aligncenter size-full wp-image-632" title="stack" src="http://diariodecodigos.info/wp-content/uploads/2009/10/stack.png" alt="stack" width="393" height="299" /></a></p>
<p>Até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2009/10/classes-de-colecao-queue-e-stack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usando Dictionary no C#</title>
		<link>http://diariodecodigos.info/2009/09/usando-dictionary-no-c/</link>
		<comments>http://diariodecodigos.info/2009/09/usando-dictionary-no-c/#comments</comments>
		<pubDate>Sat, 12 Sep 2009 12:54:29 +0000</pubDate>
		<dc:creator>paulodiogo</dc:creator>
				<category><![CDATA[C# Linguagem]]></category>
		<category><![CDATA[Arrays]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Collections]]></category>

		<guid isPermaLink="false">http://diariodecodigos.info/?p=454</guid>
		<description><![CDATA[Vamos lá&#8230; vou falar sobre o Dictionary do c#, eu falaria que se parece muito com o HashMap do Java, pelo que eu usei&#8230; private Dictionary&#38;lt;String, int&#38;gt; table = new Dictionary&#38;lt;String, int&#38;gt;(); O Dictionary trabalha como o HashMap do java, que tem uma chave e um valor, no nosso caso a chave vai ser uma]]></description>
			<content:encoded><![CDATA[<p><img src="http://diariodecodigos.info/wp-content/uploads/2009/08/C.gif" alt="" /><br />
Vamos lá&#8230; vou falar sobre o Dictionary do c#, eu falaria que se parece muito com o HashMap do Java, pelo que eu usei&#8230;</p>
<p><span id="more-454"></span></p>
<pre class="brush: csharp;">

private Dictionary&amp;lt;String, int&amp;gt; table = new Dictionary&amp;lt;String, int&amp;gt;();
</pre>
<p>O Dictionary trabalha como o HashMap do java, que tem uma chave e um valor, no nosso caso a chave vai ser uma String e o valor um inteiro.</p>
<p>Adicionando itens no Dictionary.</p>
<pre class="brush: csharp;">
this.table.Add(&amp;quot;PAULO&amp;quot;,21);
this.table.Add(&amp;quot;Alexandre&amp;quot;,24);
</pre>
<p>No caso de se tentar adicionar e ja existir a chave, não vamos conseguir pois as chaves nao podem se repetir, como em um dicionario.</p>
<p>Removendo itens de um Dictionary:</p>
<pre class="brush: csharp;">
this.table.Remove(&amp;quot;PAULO&amp;quot;);
</pre>
<p>No caso da remoção de um elemento, temos que passar uma chave, se a chave não existir vamos tomar uma Exceção na cara. =D</p>
<p>Simples assim.</p>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2009/09/usando-dictionary-no-c/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>C# Classe Coleção + ArrayList</title>
		<link>http://diariodecodigos.info/2009/08/c-classe-colecao-arraylist/</link>
		<comments>http://diariodecodigos.info/2009/08/c-classe-colecao-arraylist/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 01:28:46 +0000</pubDate>
		<dc:creator>Alexandre Santos</dc:creator>
				<category><![CDATA[C# Linguagem]]></category>
		<category><![CDATA[Array]]></category>
		<category><![CDATA[boxing]]></category>
		<category><![CDATA[casting]]></category>
		<category><![CDATA[Classe Coleção]]></category>
		<category><![CDATA[object]]></category>

		<guid isPermaLink="false">http://diariodecodigos.info/?p=370</guid>
		<description><![CDATA[No meu último post, falamos sobre Arrays, agora você aprenderá o que é uma Classe de Coleção e qual a diferença entre ela e um Array. Classes de Coleção derivam do namespace System.Collection , visite Object Browser do Visual Studio 2008 &#8211; CTRL+ALT+J, que colecionam elementos só que de uma maneira muito especial. As classes]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-351" title="C#" src="http://diariodecodigos.info/wp-content/uploads/2009/08/C.gif" alt="C#" width="550" height="57" /></p>
<p>No meu último post, falamos sobre <em>Arrays</em>, agora você aprenderá o que é uma <strong><em>Classe de Coleção</em></strong> e qual a diferença entre ela e um <em>Array</em>. <strong></strong></p>
<p><strong>Classes de Coleção</strong> derivam do <strong>namespace</strong> <em>System.Collection</em> , visite <em>Object Browser</em> do <em>Visual Studio 2008</em> &#8211; <em>CTRL+ALT+J</em>, que colecionam elementos  só que de uma maneira muito especial.</p>
<p><span id="more-370"></span>As classes base de coleção armazenam e retornam seus elementos como umo bjetos (<em>object</em>), isso quer dizer que ao contrário de um <em>Array</em> convencional, que você pode criar ele do tipo <strong><em>int</em></strong> e os valores são armazenados diretamente como um <em>inteiro</em>. Uma classe de coleção os valores sofrerão <strong>boxing </strong>(explicarei em outro post) isso quer dizer que o valor não fica na <strong>pilha</strong> mas sim no <strong>heap</strong>, na <strong>pilha</strong> fica apenas um <em>alias</em> para o elemento no <strong>heap</strong>, deu pra entender?<br />
<strong></strong></p>
<p><strong>OBS</strong>: Existe classes de coleção que nem sempre usam <em>object</em> como tipo de elemento e que podem sim armazenar <em>tipo-valor</em> assim como <em>tipo-referência</em>, mas esse não é o nosso caso agora&#8230;</p>
<h2>ArrayList</h2>
<p><strong><em> ArrayList</em></strong> é muito bom para misturar elementos além de ter características que um <em>Array</em> comum não tem, exemplo:</p>
<ul>
<li> Para redimensionar um <em>Array</em>, você precisa criar um novo <em></em>maior copiar os elementos para esse novo <em>Array</em> ou se for no caso de diminuir criar um <em>Array</em> menor e omitir elementos.</li>
<li>Para adicionar um elemento ou remover você terá que redimensionar, em conclusões finais você terá que seguir a teoria do que foi dito acima.</li>
</ul>
<p>Com um <em><strong>ArrayList</strong></em> essa limitação acaba, para<em> remover</em>, <em>adicionar</em> e <em>inserir</em> nós usaremos <strong>métodos</strong>.</p>
<p>Veremos aqui alguns desses métodos e propriedades da classe de coleção <em><strong>ArrayList</strong></em>.</p>
<pre class="brush: csharp;">
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;

namespace ArrayList0
{
    class Program
    {
        static void Main(string[] args)
        {
            // Primeiro criamos o nosso objeto ArrayList chamado de meuAL
            ArrayList meuAL = new ArrayList();

            // Mostramos a capacidade do nosso ArrayList, nesse caso
            // não precisamos de parênteses () porque é uma propriedade
            // e não um método
            Console.WriteLine(&quot;1- O ArrayList.Capacity é {0} \n&quot;, meuAL.Capacity);

            // Populamos o nosso ArrayList
            Console.WriteLine(&quot;2- Populando ArrayList...&quot;);
            int z = 0;
            for (int i = 5; z &lt; i; i--)
            {
                // Repare que utilizamos um método
                // não atribuimos mais valor do elemento
                // ao indice como antes: meuAL[0] = valor
                meuAL.Add(i);
            }

            // Agora da pra perceber que a capacidade do ArrayList
            // aumentou dinâmicamente ao adicionar-mos elementos
            Console.WriteLine(&quot;\n3- O ArrayList.Capacity agora é: {0}\n&quot;, meuAL.Capacity);

            // A propriedade Count contém o número de elementos
            Console.WriteLine(&quot;4- ArrayList.Count é: {0} \n&quot;, meuAL.Count);

            // Imprimimos os valores dos elementos na tela
            for (int y = 0; y &lt; meuAL.Count; y++)
            {
                try
                {
                    // Observe que é necessário fazer casting dos elementos
                    // isso porque os elementos armazenados no ArrayList
                    // são objetos, quando valores são inseridos com o método
                    // Add() ou Insert() eles sofrem boxing e são armazenados
                    // no heap e não na pilha
                    Console.WriteLine(&quot;O índice {0} = {1}&quot;, y, (int)meuAL[y]);
                }
                catch (Exception e)
                {
                    Console.WriteLine(&quot;\n\n Ops... Algo Errado Aconteceu!\n {0}&quot;, e);
                }
            }

            // Tiramos as Gorduras....
            meuAL.TrimToSize();
            Console.WriteLine(&quot;\n5- Tiramos as gorduras\n   Agora o ArrayList.Capacity é: {0}\n&quot;, meuAL.Capacity);

            // A propriedade Count contém o número de elementos
            Console.WriteLine(&quot;6- ArrayList.Count ainda é: {0} \n&quot;, meuAL.Count);

            // Imprimimos os valores dos elementos na tela novamente
            for (int y = 0; y &lt; meuAL.Count; y++)
            {
                try
                {
                    Console.WriteLine(&quot;O índice {0} = {1}&quot;, y, (int)meuAL[y]);
                }
                catch (Exception e)
                {
                    Console.WriteLine(&quot;\n\n Ops... Algo Errado Aconteceu!\n {0}&quot;, e);
                }
            }
        } // END MAIN
    } // END CLASS PROGRAM
}// END NAMESPACE#
</pre>
<p>Esse foi só um exemplo! Se tiverem com tempo brinquem com o <em><strong>Object Browser</strong></em> e procurem saber como funciona os seguintes métodos, eles são bem interessantes&#8230;</p>
<ul>
<li><em>insert();</em></li>
<li><em>remove();</em></li>
<li><em>removeAt();</em></li>
<li><em>removeRange();</em></li>
<li><em>getRange();</em></li>
<li><em>toArray();</em></li>
<li><em>sort();</em></li>
<li><em>reverse();</em></li>
</ul>
<p style="text-align: center;"><a title="Clique para ampliar" href="http://diariodecodigos.info/wp-content/uploads/2009/08/snapshot-VisualObject.jpg" target="_blank"><img class="aligncenter size-full wp-image-371" src="http://diariodecodigos.info/wp-content/uploads/2009/08/snapshot-VisualObject.jpg" alt="Object Browser" width="614" height="432" /></a></p>
<p>Abraços&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2009/08/c-classe-colecao-arraylist/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>C# Arrays</title>
		<link>http://diariodecodigos.info/2009/08/c-arrays/</link>
		<comments>http://diariodecodigos.info/2009/08/c-arrays/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 22:51:25 +0000</pubDate>
		<dc:creator>Alexandre Santos</dc:creator>
				<category><![CDATA[C# Linguagem]]></category>
		<category><![CDATA[Array]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Coleções]]></category>

		<guid isPermaLink="false">http://diariodecodigos.info/?p=350</guid>
		<description><![CDATA[Usando Arrays com C#]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-351" title="C#" src="http://diariodecodigos.info/wp-content/uploads/2009/08/C.gif" alt="C#" width="550" height="57" /></p>
<p>Olá a todos,</p>
<p>é verdade depois de um tempo todo mundo aparece&#8230; fiquei sem fazer posts nesses últimos dias porque por enquanto eu trabalho com um chefe maluco que joga 3 projetos para eu Administrar, Programar, Criar a Modelagem e Colocar em Produção em apenas 1 mês!</p>
<p>Definitivamente acabou com minha vida, e pra completar vou ter que viajar pra Angola no dia 6 de setembro&#8230; é a vida, mas vamos ao que interessa&#8230; <strong>Arrays em C#</strong>!</p>
<p><span id="more-350"></span>Bem.. a maioria das pessoas que já desenvolveram podem pular esse paragrafo. O array nada mais é uma seqüência de elementos do mesmo tipo, esses elementos são acessados por um índice do tipo <em>int. </em></p>
<p>Em questão de memória <em>o Array </em>residem em um bloco contíguo da memória e são <a href="http://diariodecodigos.info/2009/07/tipos-valor-e-tipo-referencia-no-c/" target="_blank">tipo-referência</a>, em questão de OO Array também é uma classe, como sempre volto a repetir.. quer saber mais sobre tal classe, interface e etc.? Procure no Object Browser no seu Visual Studio 2008 &#8220;CTRL+W, J&#8221;.</p>
<h2>Declarando e Instânciando Array</h2>
<p>A declaração de um array é feito especificando o nome do tipo de elemento seguido por um par de colchetes &#8220;[]&#8221; e o nome do próprio array:</p>
<pre class="brush: csharp;">
int[] motosID;
</pre>
<p>Como toda boa classe sem você instância-la você não faz nada! precisamos criar o objeto. Para instancia-lo utiliza-se a keyword <em>new</em> com o tipo do array seguido com o tamanho dentro de colchetes&#8230; Instanciar um array também inicializa seus valores padrões (0, null ou false dependendo do tipo do array)</p>
<pre class="brush: csharp;">
motosID = new int[9]; // instância o array motos com o tamanho 10 (os índices iniciam contando do 0)
/* Você também pode inicializar, instanciar e definir os valores ao mesmo tempo */
int[] motosID = { 10, 11, 12, 13, 14, 15, 16 };
</pre>
<p>Também é possível criar Arrays multidimensionais, mas esse não é o objetivo desse artigo.</p>
<p>Você também pode criar Arrays utilizando estruturas (structs) e classe como o tipo do Array.</p>
<pre class="brush: csharp;">
public class Moto{
// ...
    public Moto(){
        //Construtor padrão
    }
&lt;pre&gt;    public Moto(string nomeMoto){
        //Construtor com argumento
    }&lt;/pre&gt;
}

Moto[] intruder = new Moto[1] { new Moto(&quot;Intruder125cc&quot;), new Moto(&quot;Intruder250cc&quot;) };
/* Você pode usar o construtor da classe para iniciar os valores do array */
</pre>
<h2>Iniciando um Array sem Tipo</h2>
<p>Muitas vezes você não sabe qual vai ser o tipo do array à ser utilizado, porém você ainda precisa declara-lo&#8230; com isso o C# pode &#8220;adivinhar&#8221; o tipo dos valores que estão sendo utilizados.</p>
<pre class="brush: csharp;">
var carros = new[]{&quot;Palio&quot;, &quot;Siena&quot;, &quot;Punto&quot;};
</pre>
<p>As novidades aqui são: a palavra-chave &#8220;var&#8221;; a omissão dos colchetes após o tipo (porque não existe tipo aqui ao declarar); a utilização do operador <em>new</em> e os colchetes antes da lista inicializadora.</p>
<p>Para utilizar esse recurso infelizmente você tem que assegurar que todos os valores do array serão iguais se no exemplo acima se eu colocasse depois do punto um valor <em>int</em> você obteria um erro.</p>
<p>Caso os valores sejam compatíveis o compilador converte automaticamente os valores, exemplo:</p>
<pre class="brush: csharp;">
var numeros = new[]{5, 6, 7, 8, 9, 9.5, 9.6, 9.9, 10} // nesse caso o array não será int mas sim double
</pre>
<p>Talvez agora para você um array não tipado pode não ter muito sentido, eles são mais úteis utilizados em conjunto com tipos anônimos, mas isso é assunto para outro post.</p>
<h2>Acessando Elementos no Array</h2>
<p>Agora que já aprendemos a criar um array, precisamos recuperar os valores armazenados lá dentro.</p>
<pre class="brush: csharp;">
int[] numeros = {1, 2, 3, 4, 5};
Console.WriteLine(numeros[0]); // O valor 1 será impresso na sua tela
//vamos modificar o valor daquela posição do array
numeros[0] = 11;
Console.WriteLine(numeros[0]); // O valor 11 será impresso na sua tela
</pre>
<p>Como nós sabemos que pode exestir problemas como em qualquer ciração feita pelo ser humano, alguém pode requisitar um índice de acesso que não existe, para isso temos que tratar o erro:</p>
<pre class="brush: csharp;">
try{
    int[] numeros = {1, 2, 3, 4, 5};
    Console.WriteLine(numeros[5]);
} catch (IndexOutOfRangeException e){
 // código para  tratar o erro
}
</pre>
<p>Não só isso mas existe a necessidade também de percorremos um array inteiro, claro que para isso podemos utilizar o famoso FOR!!!</p>
<pre class="brush: csharp;">
int[] numeros = {5, 6, 7, 8, 9, 10,, 11, 12, 13, 14, 15};

for(int i = 0; i &lt; numeros.Length; i++){
int numero = numeros[i];
Console.WirteLine(numero);
}
</pre>
<p><em>Length</em> é uma propriedade e não um array, por isso não é utilizados colchetes &#8220;()&#8221; ao acessa-lo. Lembre-se que o índice do array começa com zero então a última posição é <em>Length &#8211; 1</em>. Você também pode utilizar o <em>foreach</em> para percorrer um elemento.</p>
<pre class="brush: csharp;">
int numeros = {5, 6, 7, 8, 9, 10,, 11, 12, 13, 14, 15};
foreach (int numero in numeros){
Console.WriteLine(numero);
}
</pre>
<p>O <em>foreach</em> declara uma variável de iteração (neste caso o inteiro <em>numero</em>) que recebe cada valor do Array <em>numeros</em> e executa as instruções seguintes, em primeira vista isso é maravilhoso para percorrer, mas infelizmente você fica limitado:</p>
<ol>
<li>Percorrer apenas em uma parte do Array, ou pular certos elementos. O <em>foreach</em> percorre ele todo obrigatóriamente</li>
<li>Percorrer o Array de trás para frente, o <em>foreach</em> percorre o Array sempre do <em>0</em> à <em>Lenght -1</em></li>
<li>Se o corpo do loop necessita saber o índice ao invéz do valor atual.</li>
<li>Se você precisar alterar o valor de um elemento no array também ficará limitado</li>
<li>Etc.</li>
</ol>
<h2>Copiando Arrays</h2>
<p>Como um array é um <em>tipo-referência</em> uma variável Array possui uma referência a uma instância do Array, isso quer dizer que ao copiar um Array você acaba copiando a referência e não o Array em si próprio.</p>
<pre class="brush: csharp;">
int[] inteiros = {1, 2, 3, 4, 5, 6, 7, 8, 9, 11};
int[] inteirosSegundo = inteiros;
</pre>
<p>O problema desse exemplo acima, é que se você modificar alguma valor no Array do <em>inteirosSegundo</em> você estará modificando o valor do Array ponteiros, e vice-versa&#8230;</p>
<p>Para copiar o Array é necessário criar outro Array do mesmo tipo e com o mesmo tamanho e criar um FOR para percorrer os valores do Array para o outro Array a ser copiado, exemplo:</p>
<pre class="brush: csharp;">
int[] inteiros = {1, 2, 3, 4, 5, 6, 7, 8, 9, 11};
int[] inteirosCopy = new  int[inteiros.Length];

for(int i = 0; i &lt; inteiros.Length; i++){
inteirosCopy[i] = inteiros[i];
}
</pre>
<p>O legal é que a classe <em>System.Array</em> nos fornece alguns métodos legal, e dentre elas é <em>CopyTo()</em> que copia os valores de um Array para outro partindo de um determinado índice.</p>
<pre class="brush: csharp;">
int[] inteiros = {1, 2, 3, 4, 5, 6, 7, 8, 9, 11};
int[] inteirosCopy = new int[inteiros.Length];
inteiros.CopyTo(inteirosCopy, 0);
</pre>
<p>Um detalhe é que esse método é estático, então você pode utilizar esse método a partir da própria classe System.Array.</p>
<pre class="brush: csharp;">
int[] inteiros = {1, 2, 3, 4, 5, 6, 7, 8, 9, 11};
int[] inteirosCopy = new int[inteiros.Length];
Array.CopyTo(inteiros, inteirosCopy, inteirosCopy.Length);
</pre>
<p>Para mais detalhes de uma olhada no Object Browser do seu Visual Studio.</p>
<p>Você também tem o método <em>Clone</em> no seu objeto de Array ele retorna um object, para copiar os valores é necessário fazer um <em>casting</em> (casting será abordado em outro post, aguardem)</p>
<p>Boa sorte!</p>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2009/08/c-arrays/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Valores Null no C#</title>
		<link>http://diariodecodigos.info/2009/07/287/</link>
		<comments>http://diariodecodigos.info/2009/07/287/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 01:35:08 +0000</pubDate>
		<dc:creator>Alexandre Santos</dc:creator>
				<category><![CDATA[C# Linguagem]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Null]]></category>

		<guid isPermaLink="false">http://diariodecodigos.info/?p=287</guid>
		<description><![CDATA[Requisitos: Tipo-Valor e Tipo-Referência. Você deve estar careca de saber o que é um valor null (nulo), o que você não deve saber é que no C# um valor nulo é ele próprio uma referência e você não pode atribui-lo a uma variável tipo-valor, como por exemplo um inteiro, legal né? Moto biz04 = new]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-351" title="C#" src="http://diariodecodigos.info/wp-content/uploads/2009/08/C.gif" alt="C#" width="550" height="57" /></p>
<p>Requisitos: <a href="http://diariodecodigos.info/2009/07/tipos-valor-e-tipo-referencia-no-c/">Tipo-Valor e Tipo-Referência</a>.</p>
<p>Você deve estar careca de saber o que é um valor <em>null</em> (nulo), o que você não deve saber é que no <em>C#</em> um valor <em>nulo</em> é ele próprio uma referência e você não pode atribui-lo a uma variável <em>tipo-valor</em>, como por exemplo um inteiro, legal né?</p>
<p><span id="more-287"></span></p>
<pre class="brush: csharp;">
Moto biz04 = new Moto();
Moto biz04-02;

if (biz-02 == ????)
      biz04-02 = biz04
</pre>
<p>Bem se não existisse valores <em>nulos</em> nós não poderiamos verificar se um um objeto está <em>vazio</em>, ou seja não referenciando para lugar algum ou com algum valor atriubuido, como acima.</p>
<p>Agora vamos fazer certo:</p>
<pre class="brush: csharp;">
Moto biz04 = new Moto();
Moto biz04-02 = null;

if (biz04-02 == null){
      biz04-02 = biz04 //Se o objeto biz04-02 for nulo atribui a referência de biz-04
}
</pre>
<p>Agora, analise a seguinte instrução:</p>
<pre class="brush: csharp;">
int p0 = null;
</pre>
<p>Se você acha que isso vai compilar está muito enganado, como você leu anteriormente o “<em>null</em>” é uma <em>tipo-referência</em>, e não tem como nós colocarmos um <em>tipo-referência</em> dentro de um <em>tipo-valor</em>, para isso existe o <strong>tipo-valor nullable</strong>.</p>
<p>O C# utilizar um modificador que define uma variável como um <strong>tipo-valor nullable</strong>, ele é o ponto de interrogação “<em>?</em>”.</p>
<pre class="brush: csharp;">
int? p0 = null;

if (p0 == null){
int = 0;
}
</pre>
<p>Observação importante: você não pode atribuir o valor de uma variável <em>nullable</em> para uma variável normal</p>
<pre class="brush: csharp;">
int? p0 = null;
int p1 = 125;

p0 = 250;

p0 = p1; // copia o valor de p1 (125) para p0 que deixa de ser 250 e vira 125

p1 = p0; // ERRO!
</pre>
<p>Você também não poderá utilizar o valor de uma variável <em>nullable</em> em um método que espera receber um <em>tipo-valor normal</em>.</p>
<p>O tipo <em>nullable</em> implementa algumas propriedades a mais, como “<strong>HasValue</strong>” e “<strong>Value</strong>”</p>
<pre class="brush: csharp;">
int? p0 = null;

if(!p0.HasValue) // Sim você também poderia usar p0 == null
           p0 = 125;
else
          Console.WriteLine(p0.Value); // Sim de novo você pode usar apenas a variável p0
</pre>
<p><em>HasValue</em> retorna <strong>null</strong> se ele realmente for nulo, e <em>Value</em> retorna o conteúdo da variável, parece ridículo ter essas propriedades, mas um dia lhe serão de grande valia meu nobre.</p>
<p>Simples assim (a operadora telefônica OI é uma merda)</p>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2009/07/287/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Try ,Catch e Finally</title>
		<link>http://diariodecodigos.info/2009/07/try-catch-e-finally/</link>
		<comments>http://diariodecodigos.info/2009/07/try-catch-e-finally/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 12:00:21 +0000</pubDate>
		<dc:creator>paulodiogo</dc:creator>
				<category><![CDATA[C# Linguagem]]></category>
		<category><![CDATA[Tecnicas de Programação]]></category>
		<category><![CDATA[Catch e Finally]]></category>
		<category><![CDATA[Tecnicas]]></category>
		<category><![CDATA[Try]]></category>

		<guid isPermaLink="false">http://diariodecodigos.info/?p=262</guid>
		<description><![CDATA[Try ,Catch e Finally são nossos amigos&#8230; de todos os dias, dias de luta contra os catastróficos erro de RunTime e outros&#8230; eu os odeio&#8230; não por serem inúteis mas sim por parecer que nossas aplicações estão um tanto quanto mal feitas, por isso usa-las. try { return new SubSonic.Select(&#34;nome&#34;).From(&#34;clientes&#34;) .WhereExpression(&#34;nome&#34;).Like(&#34;%&#34;+nm+&#34;%&#34;) .ExecuteAsCollection&#60;ClienteCollection&#62;(); }catch(SubSonic.SqlQueryException ex) {]]></description>
			<content:encoded><![CDATA[<p>Try ,Catch e Finally são nossos amigos&#8230; de todos os dias, dias de luta contra os catastróficos erro de RunTime e outros&#8230; eu os odeio&#8230; não por serem inúteis mas sim por parecer que nossas aplicações estão um tanto quanto mal feitas, por isso usa-las.</p>
<p><span id="more-262"></span></p>
<pre class="brush: csharp;">
try
            {
            return new SubSonic.Select(&quot;nome&quot;).From(&quot;clientes&quot;)
                .WhereExpression(&quot;nome&quot;).Like(&quot;%&quot;+nm+&quot;%&quot;)
                .ExecuteAsCollection&lt;ClienteCollection&gt;();
             }catch(SubSonic.SqlQueryException ex)
            {
                throw new SubSonic.SqlQueryException(ex.ToString());
            }finally{
 Connection().Close();
}
</pre>
<p>1º o try ele vai fazer o que está la dentro<br />
2º se houver algum erro ele captura com o catch<br />
3º independente se houver erro ou não ele executa o que esta no finally</p>
<p>Lógico que podemos colocar algo mais gostoso e complexo ai, mas não é o que estamos tentando abordar neste post&#8230; =P</p>
<p>Simples Assim&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2009/07/try-catch-e-finally/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Utilizando Parâmetro por Referência em Métodos</title>
		<link>http://diariodecodigos.info/2009/07/utilizando-parametro-por-referencia-em-metodos/</link>
		<comments>http://diariodecodigos.info/2009/07/utilizando-parametro-por-referencia-em-metodos/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 19:43:05 +0000</pubDate>
		<dc:creator>Alexandre Santos</dc:creator>
				<category><![CDATA[C# Linguagem]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Parâmetro Referência]]></category>

		<guid isPermaLink="false">http://diariodecodigos.info/?p=256</guid>
		<description><![CDATA[Continuando o embalo do último Post (Tipo-Valor e Tipo-Referência), vamos ver o que é um Método que usa parâmetros por referência. Primeiro vamos relembrar o que é um método que usa parâmetro por valor (provavelmente você já uso muito em funções): class DiarioDeCodigos{ public static int inteiro; public static void PassarValor(int param){ this.inteiro = param++;]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-351" title="C#" src="http://diariodecodigos.info/wp-content/uploads/2009/08/C.gif" alt="C#" width="550" height="57" /></p>
<p>Continuando o embalo do último Post (<a href="http://diariodecodigos.info/2009/07/tipos-valor-e-tipo-referencia-no-c/" target="_blank">Tipo-Valor e Tipo-Referência</a>), vamos ver o que é um Método que usa parâmetros por referência.</p>
<p><span id="more-256"></span>Primeiro vamos relembrar o que é um método que usa parâmetro por valor (provavelmente você já uso muito em funções):</p>
<pre class="brush: csharp;">
class DiarioDeCodigos{

public static int inteiro;

public static void PassarValor(int param){

this.inteiro = param++;

}

}
</pre>
<p>A cima está claro que o valor passado é um inteiro, como vimos no último post o <em>int</em> é um <em>tipo-valor</em>, ao executar essa classe e passar qualquer variável como valor ela logicamente não será modificada, apenas o campo inteiro da classe <em>DiarioDeCodigos</em> será modificado.</p>
<pre class="brush: csharp;">
static void Main(String args[]){

int inteiroTeste = 5;

DiarioDeCodigos.PassarValor(inteiroTeste);

Console.WriteLine(“O valor da variável inteiroTeste é: {0}”, inteiroTeste); //imprimi 5

Console.WriteLine(“O valor da do campo inteiro da classe DiarioDeCodigos é: {0}”, DiarioDeCodigos.inteiro); // imprimi 6

}
</pre>
<p>Nota: Observe que a classe <em>DiarioDeCodigos</em> não foi instânciada, a palavra-chave <em>static</em> me permite usar um método ou campo de uma classe sem instânciar.</p>
<p>Agora um exemplo de método que utiliza <em>tipo-referência</em>:</p>
<pre class="brush: csharp;">
class Moto {

public int qtdTanqueGasolina;

public string nomeMoto;

public Moto(){

// Construtor padrão da classe Moto

this.nomeMoto = “SemNome”;

}

public Moto(string nomeMoto){

// Construtor sobrecarregado

this.nomeMoto = nomeMoto;

// Note que o nome do parâmetro é igual ao nome da variável, se você esquecer de
// colocar a palavra-chave “this” para dizer que aquela variável é um campo da classe
// esse código retornaria um erro

}

public void GetNomeMotoAntiga(Moto motoVelha){

Console.WriteLine(“O nome da moto da minha moto antiga é: {0}”, motoVelha.nomeMoto;

}

} // Fim da classe

Moto intruder92 = new Moto(“Intruder 250cc – Antiga”);

Moto intruder09 = new Moto(“Intruder 125cc – Nova”);

intruder09.GetNomeMotoAntiga(intruder92); // imprimi: “Intruder 250cc – Antiga”
</pre>
<p>No código a cima existe uma classe <em>Moto</em> e essa classe tem um método que recebe a referência de um outro objeto <em>Moto</em> para pegar o atributo <em>nomeMoto</em> de sua antiga Moto.</p>
<p>Ao executar o método <em>GetNomeMotoAntiga</em> pega a referência do campo <em>nomeMoto</em> da instância do objeto passado como parâmetro e imprimi na tela, o nome de sua antiga moto, esse é um exemplo de parâmetro de referência.</p>
<p>Simples assim.</p>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2009/07/utilizando-parametro-por-referencia-em-metodos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tipo-Valor e Tipo-Referência no C#</title>
		<link>http://diariodecodigos.info/2009/07/tipos-valor-e-tipo-referencia-no-c/</link>
		<comments>http://diariodecodigos.info/2009/07/tipos-valor-e-tipo-referencia-no-c/#comments</comments>
		<pubDate>Sat, 25 Jul 2009 01:52:19 +0000</pubDate>
		<dc:creator>Alexandre Santos</dc:creator>
				<category><![CDATA[C# Linguagem]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Tipo-Referência]]></category>
		<category><![CDATA[Tipo-Valor]]></category>

		<guid isPermaLink="false">http://diariodecodigos.info/?p=234</guid>
		<description><![CDATA[Tipo-Valor (ou “value type” em inglês) é o coletivo dos tipos int, float, double e char, quando você declara uma variável tipo-valor o compilador gera instruções para alocar um bloco de memória grande o suficiente para o conter o valor correspondente. Por exemplo, quando você declara alguma variável do tipo int o compilador gera as]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-351" title="C#" src="http://diariodecodigos.info/wp-content/uploads/2009/08/C.gif" alt="C#" width="550" height="57" /></p>
<p><strong>Tipo-Valor</strong> (ou “value type” em inglês) é o coletivo dos tipos<em> int</em>, <em>float</em>, <em>double</em> e <em>char</em>, quando você declara uma variável tipo-valor o compilador gera instruções para alocar um bloco de memória grande o suficiente para o conter o valor correspondente.<br />
<span id="more-234"></span>Por exemplo, quando você declara alguma variável do tipo <em>int</em> o compilador gera as instruções para alocar <em>4 bytes</em> (32 bits) de memória, quando você atribui algum valor a <em>int</em> o compilador faz com que o mesmo seja copiado para esse bloco, alocado anteriormente, na memória.</p>
<pre class="brush: csharp;">
int algumInteiro; // aloca 4 bytes na memória
algumInteiro =  125; // O valor “125” é copiado para dentro do espaço alocado
</pre>
<p><strong>Tipo-Referência</strong> (reference type), é o tipo “classe” (definição de um objeto), são tratados diferentemente aos Tipo-Valor. Quando você declara uma classe, o compilador não gera instruções para alocar memória suficiente para armazenar a classe declarada, mas sim para alocar apenas uma pequena parte da memória para armazenar uma referência para outro bloco de memória que tenha a classe em si.<br />
Resumindo tudo: Um endereço aponta para outro bloco na memória.<br />
O armazenamento do objeto só é realmente alocado quando a a palavra-chave <em>new</em> é usada para instanciar um objeto (lembre-se que um objeto é a instância de uma classe). Uma classe é um exemplo de Tipo-Referência. Tipos referência contém referência a blocos de memória.</p>
<pre class="brush: csharp;">
class Moto {
    public int qtdTanqueGasolina;

    public Moto(){
        // Construtor padrão da classe Moto
    }
} // Fim da classe

Moto intruder; // Aloca um pequeno espaço na memória para armazenar a referência do objeto intruder
intruder = new Moto(); // Agora a objeto Intruder é alocado para a memória onde está sendo referenciada pela instrução anterior.
</pre>
<p>Lembre-se que o tipo <em>string</em> não é um Tipo-Valor! O tipo <em>string</em>, ou melhor a palavra-chave “string” é apenas um alias para a classe <em>System.String</em>, consequentemente ela não é um tipo primitivo.</p>
<p>Quando você declara a variável <em>primeiroInt</em> como <em>int</em> e aloca a constante 150, na memória existe um pedaço só para a variável <em>primeiroInt</em> se você declara a variável <em>segundoInt</em> e executar a instrução “<em>segundoInt = primeiroInt</em>” você atribui o valor do <em>primeiroInt</em> ao <em>segundoInt</em>, embora eles tenham o mesmo valor existe dois blocos diferentes na memória, um para cada variável, assim logicamente se você modificar o valor do <em>primeiroInt</em> para 98 o <em>segundoInt</em> continuará tendo o valor 150 no seu outro espaço da memória.</p>
<p>Com variáveis do Tipo-Refência, acontece diferente, se você instanciar o objeto <em>intruder</em> da classe <em>Moto</em> você está referenciando a classe <em>Moto</em> com <em>Intruder</em>, ao declarar o objeto <em>shadown</em> e tentar  passar o valor de <em>intruder</em> à <em>shadown, </em>como abaixo:</p>
<pre class="brush: csharp;">
Moto intruder = new Moto();
Moto shadown = intruder;</pre>
<p>Você está alocando na memória a variável <em>shadown</em> que é uma referência para o mesmo objeto que a variável <em>intruder</em> referencia.</p>
<p>Sendo desse jeito, se você mudar no objeto <em>intruder</em> o valor do campo <em>qtdTanqueGasolina</em> de &#8220;0&#8243; (zero) para &#8220;8&#8243; (oito)  esse valor também será mudado no objeto<em> shadown!</em>. Porque <em>shadown</em> está apontando para o mesmo objeto que <em>intruder</em>, ou seja <em>shadown</em> e <em>intruder</em> são a mesma Moto, com dois nomes diferentes.</p>
<p>Até a próxima&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2009/07/tipos-valor-e-tipo-referencia-no-c/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Como herdar construtor de super classe</title>
		<link>http://diariodecodigos.info/2009/07/como-herdar-construtor-de-super-classe/</link>
		<comments>http://diariodecodigos.info/2009/07/como-herdar-construtor-de-super-classe/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 14:29:00 +0000</pubDate>
		<dc:creator>paulodiogo</dc:creator>
				<category><![CDATA[C# Linguagem]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Herdar Construtores]]></category>

		<guid isPermaLink="false">http://diariodecodigos.wordpress.com/2009/07/10/como-herdar-construtor-de-super-classe/</guid>
		<description><![CDATA[Nessa parte eu bati cabeça um tempao, por que em java é só vc escrever e por super(args[]); ele vai de boa mas em c# existem algumas diferenças: Exemplo: você tem 2 construtores na classe abstrata: //contrutor 1 protected RelatorioAbstrato(int cnt, int total,DataSet dataset, DateTime data) { this.cont = cnt; this.total = total; this.dt1 =]]></description>
			<content:encoded><![CDATA[<p>Nessa parte eu bati cabeça um tempao, por que em java é só vc escrever e por super(args[]);</p>
<p>ele vai de boa mas em c# existem algumas diferenças:</p>
<p><span id="more-26"></span></p>
<p>Exemplo:</p>
<pre class="brush: csharp;">
você tem 2 construtores na classe abstrata:
//contrutor 1
protected RelatorioAbstrato(int cnt, int total,DataSet dataset,
DateTime data)
        {
            this.cont = cnt;
            this.total = total;
            this.dt1 = data;
            this.ds = dataset;

        }
//contrutor 2
protected RelatorioAbstrato(int cnt, int total, DataSet dataset,
DateTime data1, DateTime data2)
        {
            this.cont = cnt;
            this.total = total;
            this.dt1 = data1;
            this.dt2 = data2;
            this.ds = dataset;
        }
</pre>
<p>Como utilizar esse construtor?</p>
<pre class="brush: csharp;">
//subclasse 1
public RelatoriosUm(int cnt, int total, DataSet dataset
                          , DateTime data)
            : base(cnt, total, dataset, data) { }

//subclasse 2
public RelatoriosMais(int cnt, int total,DataSet dataset
                              , DateTime data1,DateTime data2)
            : base(cnt, total, dataset, data1,data2) { }
</pre>
<p>ao inves de usarmos &#8220;super(args[])&#8221; usamos &#8220;:base(args[])&#8221;</p>
<p>simples assim</p>
<p>Pronto =D</p>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2009/07/como-herdar-construtor-de-super-classe/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Criando methos abstratos em C#</title>
		<link>http://diariodecodigos.info/2009/07/criando-methos-abstratos-em-c/</link>
		<comments>http://diariodecodigos.info/2009/07/criando-methos-abstratos-em-c/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 14:25:00 +0000</pubDate>
		<dc:creator>paulodiogo</dc:creator>
				<category><![CDATA[C# Linguagem]]></category>

		<guid isPermaLink="false">http://diariodecodigos.wordpress.com/2009/07/10/criando-methos-abstratos-em-c/</guid>
		<description><![CDATA[Agora vamos ver como criar methodos abstratos em C#: public abstract ReportDocument criarRelatorio(); //na super classe Para reescrever esse metodo nas subclasses: public override ReportDocument criarRelatorio()//tem q por o override senao da erro { this.carregaRelatorio(); MyReport.SetDataSource(Ds); MyReport.SetParameterValue(&#34;total_rows&#34;, this.Cont.ToString()); MyReport.SetParameterValue(&#34;total&#34;, this.Total); MyReport.SetParameterValue(&#34;dataini&#34;, this.Dt1); MyReport.SetParameterValue(&#34;datafim&#34;, this.Dt2); return MyReport; } Pronto =D!]]></description>
			<content:encoded><![CDATA[<p>Agora vamos ver como criar methodos abstratos em C#:</p>
<pre class="brush: csharp;">
public abstract ReportDocument criarRelatorio(); //na super classe
</pre>
<p><span id="more-25"></span></p>
<p>Para reescrever esse metodo nas subclasses:</p>
<pre class="brush: csharp;">
public override ReportDocument criarRelatorio()//tem q por o override senao da erro
        {

               this.carregaRelatorio();
               MyReport.SetDataSource(Ds);
               MyReport.SetParameterValue(&quot;total_rows&quot;, this.Cont.ToString());
               MyReport.SetParameterValue(&quot;total&quot;, this.Total);
               MyReport.SetParameterValue(&quot;dataini&quot;, this.Dt1);
               MyReport.SetParameterValue(&quot;datafim&quot;, this.Dt2);

               return MyReport;

        }</pre>
<p>Pronto =D!</p>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2009/07/criando-methos-abstratos-em-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

