<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-34573201</atom:id><lastBuildDate>Thu, 05 Nov 2009 07:52:19 +0000</lastBuildDate><title>Cidadão Carioca</title><description>As aventuras, humor, observações e revolta de um cidadão carioca viajando pelo país levando oportunidades, educação e tecnologia para todos</description><link>http://cidadaocarioca.blogspot.com/</link><managingEditor>noreply@blogger.com (Dennes)</managingEditor><generator>Blogger</generator><openSearch:totalResults>727</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/CidadaoCarioca" type="application/rss+xml" /><feedburner:emailServiceId>CidadaoCarioca</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-6132247330886864860</guid><pubDate>Thu, 05 Nov 2009 07:52:00 +0000</pubDate><atom:updated>2009-11-05T05:52:19.388-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">C#</category><title>Porque os Arrays começam em Zero (0)</title><description>&lt;p&gt;Claro que entre o motivo original e os tempos atuais muitas outras decisões envolveram isso, mas o fato dos arrays começarem em zero tem um motivo interessante.&lt;/p&gt;  &lt;p&gt;A indexação de um array ( variavel[1]) significa na verdade um offset a partir da posição inicial e não o indice do elemento. Assim sendo, variavel[1] representa 1 posição a patir do item inicial, ou seja, o segundo elemento.&lt;/p&gt;  &lt;p&gt;Consequentemente, variavel[0] significa nenhuma posição a partir do item inicial, consequentemente o primeiro elemento.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-6132247330886864860?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/fqQVAeJHUCw/porque-os-arrays-comecam-em-zero-0.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/11/porque-os-arrays-comecam-em-zero-0.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-9187943773655756487</guid><pubDate>Thu, 05 Nov 2009 07:51:00 +0000</pubDate><atom:updated>2009-11-05T05:51:37.967-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">Vb.NET</category><category domain="http://www.blogger.com/atom/ns#">C#</category><title>Shadows ou new : Até onde vão – Você Sabia</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Tanto VB (shadows) como &lt;a href="http://msdn.microsoft.com/en-us/vcsharp/default.aspx" target="_blank"&gt;C#&lt;/a&gt; (new) possuem essa estranha possibilidade de uma classe filha ocultar um método da classe pai mesmo sem que a classe pai permita (sem que a classe pai utilize virtual/overridable).&lt;/p&gt;  &lt;p&gt;Veja como funciona :&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; TestePai
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; valor() &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; 10
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; TesteFilho
    &lt;span class="kwrd"&gt;Inherits&lt;/span&gt; TestePai
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Shadows&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; valor() &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; 20
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; TestePai
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; valor()
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; 10;
        }
    }&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; TesteFilho : TestePai 
    {
        &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; valor()
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; 20;
        }
    }&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Essa idéia não vai de acordo com a OO, segundo a qual a classe pai precisaria permitir (VB utiliza overridable, C# virtual) a substituição para que ela aconteça. A substituição acima pode acontecer até mesmo com métodos de assinaturas diferentes.&lt;/p&gt;

&lt;p&gt;O que muitos também não sabem é que a substituição é frágil : Se fizermos um cast da instância da classe para o tipo da classe pai a substituição “se perde” e teremos acesso ao método existente na classe pai.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; Button1_Click(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; sender &lt;span class="kwrd"&gt;As&lt;/span&gt; System.&lt;span class="kwrd"&gt;Object&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; System.EventArgs) &lt;span class="kwrd"&gt;Handles&lt;/span&gt; Button1.Click
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; t &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; TesteFilho

        MsgBox(t.valor) &lt;span class="rem"&gt;'exibe 20&lt;/span&gt;
        MsgBox(&lt;span class="kwrd"&gt;DirectCast&lt;/span&gt;(t, TestePai).valor) &lt;span class="rem"&gt;'exibe 10&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;pre class="csharpcode"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; button1_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
        {
            TesteFilho T = &lt;span class="kwrd"&gt;new&lt;/span&gt; TesteFilho();

            MessageBox.Show(T.valor().ToString()); &lt;span class="rem"&gt;// exibe 20&lt;/span&gt;

            MessageBox.Show(
                ((TestePai)T).valor().ToString()); &lt;span class="rem"&gt;// exibe 10&lt;/span&gt;
        }&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-9187943773655756487?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/4tThoVzLol8/shadows-ou-new-ate-onde-vao-voce-sabia.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/11/shadows-ou-new-ate-onde-vao-voce-sabia.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-620516888940987312</guid><pubDate>Wed, 04 Nov 2009 20:16:00 +0000</pubDate><atom:updated>2009-11-04T18:16:06.993-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">Vb.NET</category><category domain="http://www.blogger.com/atom/ns#">C#</category><title>Overloads e Hiding de nomes – Você sabia ?</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Veja este exemplo de uma situação de hiding de nomes : &lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; Teste
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; fazalgo()

    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;

    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; fazalgo(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; x &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;)

    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;

    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; teste2
        &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; testando()
            fazalgo(10) &lt;span class="rem"&gt;'linha inválida&lt;/span&gt;
            Teste.fazalgo(10) &lt;span class="rem"&gt;'linha válida&lt;/span&gt;
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;

        &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; fazalgo()

        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Teste
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; fazalgo()
        {
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; fazalgo(&lt;span class="kwrd"&gt;int&lt;/span&gt; x)
        {
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Teste2
        {
            &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; testando()
            {
                fazalgo(10); &lt;span class="rem"&gt;// linha inválida&lt;/span&gt;
                Teste.fazalgo(10); &lt;span class="rem"&gt;// linha válida&lt;/span&gt;
            }


            &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; fazalgo()
            {
            }
        }
    }&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;A classe externa tem 2 overloads do método fazalgo, a classe mais interna possui apenas um método fazalgo, sem nenhum overload adicional.&lt;/p&gt;

&lt;p&gt;Ocorre que o único método fazalgo da classe interna esconde todos os overloads existentes na classe externa, tornando a chamada a um dos overloads inválida, a menos que devidamente identificada.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-620516888940987312?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/h3_6sbAReqc/overloads-e-hiding-de-nomes-voce-sabia.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/11/overloads-e-hiding-de-nomes-voce-sabia.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-8360813320912636904</guid><pubDate>Wed, 04 Nov 2009 14:56:00 +0000</pubDate><atom:updated>2009-11-04T12:56:15.757-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">Vb.NET</category><category domain="http://www.blogger.com/atom/ns#">C#</category><title>Métodos public ou internal – Você sabia ?</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Uma classe definida como internal (ou friend) apenas pode ser acessada no mesmo projeto em que foi desenvolvida. Assim sendo, qual a diferença se um método desta classe for desenvolvido como public ou como internal ?&lt;/p&gt;  &lt;p&gt;Em ambos os casos, definindo o método como public ou internal, ele apenas poderá ser acessado dentro do projeto em que foi definido, então que &lt;em&gt;diferenç teria usar public ou internal na definição do método ?&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;A questão está na manutenção do software. Se no futuro a classe deixar de ser internal e se tornar public, o que acontecerá com o método ?&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Método public :&lt;/strong&gt; Acompanha o escopo da classe e se torna public&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Método internal :&lt;/strong&gt; Continua sendo internal, mesmo que a classe se torne public&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Desta forma, a escolha entre public ou internal para os métodos é uma escolha baseada em uma manutenção futura. Caso a classe se torne pública, o método deverá se tornará público ou se manter internal ? Respondendo a esta pergunta, escolha entre usar public ou internal nos métodos de classes internal.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-8360813320912636904?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/X4FSLBV_bhk/metodos-public-ou-internal-voce-sabia.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/11/metodos-public-ou-internal-voce-sabia.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-2881254517597307683</guid><pubDate>Thu, 29 Oct 2009 15:25:00 +0000</pubDate><atom:updated>2009-10-29T13:25:04.654-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">Vb.NET</category><category domain="http://www.blogger.com/atom/ns#">C#</category><title>Shared em Tipo Genérico</title><description>&lt;p&gt;Não é novidade para ninguém que classes Generic permitem que o tipo de dados a ser utilizado seja definido apenas no momento da criação da instância da classe.&lt;/p&gt;  &lt;p&gt;O que ocorre, porém, se uma classe generic contiver elementos shared ?&lt;/p&gt;  &lt;p&gt;Simples : O elemento shared passa a ter um valor isolado para cada tipo de dados utilizado com a classe shared.&lt;/p&gt;  &lt;p&gt;Veja um exemplo :&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; ClasseTeste(Of T)
    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; x &lt;span class="kwrd"&gt;As&lt;/span&gt; T

    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; valor &lt;span class="kwrd"&gt;As&lt;/span&gt; Int16
&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;

&lt;p&gt;Veja a manipulação desta classe em um botão :&lt;/p&gt;

&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; Button1_Click(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; sender &lt;span class="kwrd"&gt;As&lt;/span&gt; System.&lt;span class="kwrd"&gt;Object&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; System.EventArgs) &lt;span class="kwrd"&gt;Handles&lt;/span&gt; Button1.Click
        ClasseTeste(Of Int16).valor = 20
        ClasseTeste(Of &lt;span class="kwrd"&gt;String&lt;/span&gt;).valor = 30

        MsgBox(ClasseTeste(Of &lt;span class="kwrd"&gt;String&lt;/span&gt;).valor)
        MsgBox(ClasseTeste(Of Int16).valor)
    &lt;span class="kwrd"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;pre class="csharpcode"&gt;Conforme poderá testar, as variáveis “valor” para ClasseTeste(of Int16) e ClasseTeste(of String) tem valores isolados.&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;O mesmo código em &lt;a href="http://msdn.microsoft.com/en-us/vcsharp/default.aspx" target="_blank"&gt;C#&lt;/a&gt; :&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; WinTesteCSharpGeneric
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ClasseTeste&amp;lt;T&amp;gt;
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; T x;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; valor;
    }
}
’&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;O código de um botão manipulando a classe :&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; button1_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
        {
            ClasseTeste&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt;.valor = 20;
            ClasseTeste&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;.valor = 30;

            MessageBox.Show(ClasseTeste&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;.valor.ToString());
            MessageBox.Show(ClasseTeste&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt;.valor.ToString())
        }&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-2881254517597307683?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/mwuFGpFdwQs/shared-em-tipo-generico.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/10/shared-em-tipo-generico.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-124440821802235485</guid><pubDate>Wed, 28 Oct 2009 12:06:00 +0000</pubDate><atom:updated>2009-10-28T10:06:48.008-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">Vb.NET</category><category domain="http://www.blogger.com/atom/ns#">C#</category><title>Implementações Implicitas e Explicitas de Interfaces</title><description>&lt;p&gt;Implementação de interface todos vocês conhecem (espero eu) mas o conceito de implementação implicita ou explicita pode não ser muito claro especialmente para desenvolvedores VB.&lt;/p&gt;  &lt;p&gt;A questão é simples : Data uma interface ITeste, como abaixo&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; winTesteAssinaturas
{
     &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; ITeste
    {
         &lt;span class="kwrd"&gt;decimal&lt;/span&gt; calcular(&lt;span class="kwrd"&gt;int&lt;/span&gt; x);
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;A classe que implementar esta interface deseja que o método Calcular faça parte de sua própria interface pública ou não ? Na implementação implicita, fará, na explicita, não.&lt;/p&gt;

&lt;p&gt;O &lt;a href="http://msdn.microsoft.com/en-us/vcsharp/default.aspx" target="_blank"&gt;C#&lt;/a&gt; faz questão de destacar a existência da implementação implicita e explicita, veja a dica que nos dá no momento em que pedimos para implementar uma interface :&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_iMnxV1XbO4I/SugzvKtmJDI/AAAAAAAACmw/8RakRebFtWM/s1600-h/SNAG00494.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="SNAG-0049" border="0" alt="SNAG-0049" src="http://lh5.ggpht.com/_iMnxV1XbO4I/SugzwNEMVlI/AAAAAAAACm0/SnzBdg-oopA/SNAG0049_thumb2.jpg?imgmax=800" width="503" height="204" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Veja o exemplo da ClasseTeste : &lt;/p&gt;

&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ClasseTeste : ITeste 
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;decimal&lt;/span&gt; calcular2(&lt;span class="kwrd"&gt;int&lt;/span&gt; x)
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; x / 2;
        }

        &lt;span class="preproc"&gt;#region&lt;/span&gt; ITeste Members

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;decimal&lt;/span&gt; calcular(&lt;span class="kwrd"&gt;int&lt;/span&gt; x)
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; x * 2;
        }

        &lt;span class="preproc"&gt;#endregion&lt;/span&gt;
    }&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Este é um exemplo de implementação implicita, neste caso a ClasseTeste possui 2 métodos, Calcular2 e Calcular :&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_iMnxV1XbO4I/SugzxGIXrZI/AAAAAAAACm4/So4ndEYJdaY/s1600-h/SNAG00464.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="SNAG-0046" border="0" alt="SNAG-0046" src="http://lh3.ggpht.com/_iMnxV1XbO4I/SugzyHQG-oI/AAAAAAAACm8/w0QAWzmUPYw/SNAG0046_thumb2.jpg?imgmax=800" width="513" height="160" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Agora veja a ClasseTeste2, com implementação explicita :&lt;/p&gt;

&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ClasseTeste2 : ITeste 
    {

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;decimal&lt;/span&gt; calcular2(&lt;span class="kwrd"&gt;int&lt;/span&gt; x)
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; x / 2;
        }

        &lt;span class="preproc"&gt;#region&lt;/span&gt; ITeste Members

        &lt;span class="kwrd"&gt;decimal&lt;/span&gt; ITeste.calcular(&lt;span class="kwrd"&gt;int&lt;/span&gt; x)
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; x * 2;
        }

        &lt;span class="preproc"&gt;#endregion&lt;/span&gt;
    }&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Observe que a diferença da implementação implicita para a explicita é a especificação do nome da interface – ITeste – na frente do método. O resultado, porém, é bem diferente :&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_iMnxV1XbO4I/SugzzOhwpfI/AAAAAAAACnA/miBJSmlB_rg/s1600-h/SNAG00474.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="SNAG-0047" border="0" alt="SNAG-0047" src="http://lh3.ggpht.com/_iMnxV1XbO4I/Sugz0CDSPzI/AAAAAAAACnE/RPCWqyKLgUU/SNAG0047_thumb2.jpg?imgmax=800" width="525" height="153" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;O método da interface que foi implementada de forma explicita não é exibido como parte da ClasseTeste2. Ele apenas será exibido se tentarmos acessar diretamente por uma variável do tipo de interface, veja :&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_iMnxV1XbO4I/Sugz0_Yib7I/AAAAAAAACnI/NptthteEgtw/s1600-h/SNAG00484.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="SNAG-0048" border="0" alt="SNAG-0048" src="http://lh3.ggpht.com/_iMnxV1XbO4I/Sugz1qpE8jI/AAAAAAAACnM/OOvdTm1_Hi8/SNAG0048_thumb2.jpg?imgmax=800" width="527" height="187" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Ao contrário do C#, o VB é muito, muito mais sutil : Não existe nenhuma dica sobre a implementação implicita/explicita, a diferença está simplesmente no modificador de escopo :&lt;/p&gt;

&lt;p&gt;Implementação implicita :&lt;/p&gt;

&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; calcular(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; x &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Short&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Decimal&lt;/span&gt; &lt;span class="kwrd"&gt;Implements&lt;/span&gt; ITeste.calcular
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; x * 2
    &lt;span class="kwrd"&gt;End&lt;/span&gt; Function&lt;/pre&gt;

&lt;p&gt;Implementação explicita :&lt;/p&gt;

&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; calcular(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; x &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Short&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Decimal&lt;/span&gt; &lt;span class="kwrd"&gt;Implements&lt;/span&gt; ITeste.calcular
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; x * 2
    &lt;span class="kwrd"&gt;End&lt;/span&gt; Function&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Exatamente isso que você acabou de ver : No VB.NET, a única coisa que diferencia a implementação implicita da explicita é o uso de public ou private&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-124440821802235485?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/1UAjlY4q8PQ/implementacoes-implicitas-e-explicitas.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/10/implementacoes-implicitas-e-explicitas.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-8432748382839209760</guid><pubDate>Wed, 28 Oct 2009 11:46:00 +0000</pubDate><atom:updated>2009-10-28T09:46:23.465-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Capitalismo</category><category domain="http://www.blogger.com/atom/ns#">Bizarro</category><title>Hidroaviões e Fantasmas</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Notícia na TV :&lt;/strong&gt; Uma empresa de 80 funcionários é a única produtora de hidroaviões brasileiros&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Notícia no Rádio :&lt;/strong&gt; 88 funcionários públicos do senado não iniciaram seu procedimento de recadastramento, demonstrando assim serem funcionários fantasmas.&lt;/p&gt;  &lt;p&gt;Conclusão : apenas os fantasmas do senado, se um dia resolvessem virar gente que realmente faz algo, teriam potencial para criar novas industrias no país.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-8432748382839209760?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/QZzS2TgmJ90/hidroavioes-e-fantasmas.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/10/hidroavioes-e-fantasmas.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-3108317079728589041</guid><pubDate>Tue, 27 Oct 2009 12:05:00 +0000</pubDate><atom:updated>2009-10-27T10:21:59.845-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><title>VS 2010 Beta 2 : Primeiras Impressões</title><description>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_iMnxV1XbO4I/Subal4fwW3I/AAAAAAAAClk/OvUpuvi-N1g/s1600-h/VisualStudioLogoWhiteBackground2.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="VisualStudioLogoWhiteBackground" border="0" alt="VisualStudioLogoWhiteBackground" align="right" src="http://lh6.ggpht.com/_iMnxV1XbO4I/SubanELDzBI/AAAAAAAAClo/OYMa4vewDao/VisualStudioLogoWhiteBackground_thum.png?imgmax=800" width="196" height="118" /&gt;&lt;/a&gt; O que se observa nesta lista de primeiras impressões do beta 2 é que muito que &lt;a href="http://http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=965945425284378235" target="_blank"&gt;comentei sobre o beta 1&lt;/a&gt; já foi corrigido, enquanto outros problemas ou possíveis problemas surgem.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Está mais rápido &lt;/li&gt;    &lt;li&gt;Está mais bonito (fico me perguntando o quanto dele já está em &lt;a title="WPF" href="http://msdn2.microsoft.com/en-us/netframework/aa663326.aspx" target="_blank"&gt;WPF&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;A instalação gera erro com o &lt;a title="Silverlight" href="http://www.microsoft.com/silverlight/" target="_blank"&gt;silverlight&lt;/a&gt; SDK (já tinha instalado na máquina). É necessário desinstalar o Silverlight 3.0 SDK para poder seguir na instalação, pois será instalado o Silverlight 3.0 GDR SDK &lt;/li&gt;    &lt;li&gt;Um bug na instalação impede que você instale o VS2010 em uma partição que não a de sistema. Levei horas para descobrir que as estranhissimas mensagens de erro sobre XML Editor eram por causa disso e não por causa do Silverlight SDK. Vejam as mensagens em &lt;a title="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=500740&amp;amp;wa=wsignin1.0#details" href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=500740&amp;amp;wa=wsignin1.0#details"&gt;https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=500740&amp;amp;wa=wsignin1.0#details&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Ele mantém lista de projetos recentes feitos no beta 1 &lt;/li&gt;    &lt;li&gt;Abre projetos do beta 1 sem reclamar em nada. &lt;/li&gt;    &lt;li&gt;Os &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=6328591639454189049" target="_blank"&gt;problemas de desinstalação&lt;/a&gt; realmente foram corrigidos &lt;/li&gt;    &lt;li&gt;Já inclui projetos de &lt;a href="http://www.bufaloinfo.com.br/artigos/coluna46.asp" target="_blank"&gt;ASP.NET MVC&lt;/a&gt; 2.0 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_iMnxV1XbO4I/SubgmmaAfcI/AAAAAAAAClw/nPE5jpIN83E/s1600-h/SNAG00774.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="SNAG-0077" border="0" alt="SNAG-0077" src="http://lh3.ggpht.com/_iMnxV1XbO4I/Subgn_g52jI/AAAAAAAACl0/GtYBUBxK-Ek/SNAG0077_thumb2.jpg?imgmax=800" width="470" height="300" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Parece ter muitos, muitos recursos adicionais para &lt;a title="Sharepoint" href="http://www.bufaloinfo.com.br/artigos/coluna27.asp" target="_blank"&gt;sharepoint&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_iMnxV1XbO4I/Subgpf0P30I/AAAAAAAACl4/ZwM7Pn9Zu4M/s1600-h/SNAG00744.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="SNAG-0074" border="0" alt="SNAG-0074" src="http://lh6.ggpht.com/_iMnxV1XbO4I/SubgqWLSjkI/AAAAAAAACl8/DZWdmBDaRyM/SNAG0074_thumb2.jpg?imgmax=800" width="481" height="307" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Já inclui projetos de Silverlight 3.0 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_iMnxV1XbO4I/SubgrpY2WVI/AAAAAAAACmA/DPr8_HoFLV4/s1600-h/SNAG00754.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="SNAG-0075" border="0" alt="SNAG-0075" src="http://lh5.ggpht.com/_iMnxV1XbO4I/SubgsqAQkBI/AAAAAAAACmE/bRY9t_P5f8I/SNAG0075_thumb2.jpg?imgmax=800" width="501" height="320" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Já inclui opção para instalar as ferramentas do &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=1165265889739981343" target="_blank"&gt;Windows Azure&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_iMnxV1XbO4I/SubgufRKy0I/AAAAAAAACmI/VCulPgN0H-E/s1600-h/SNAG00764.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="SNAG-0076" border="0" alt="SNAG-0076" src="http://lh6.ggpht.com/_iMnxV1XbO4I/SubgvMlzRrI/AAAAAAAACmM/CgOGbLJhN7E/SNAG0076_thumb2.jpg?imgmax=800" width="496" height="317" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Ele não rodará os projetos web do beta 1, mas é fácil corrigir : o beta 1 inseriu no web.config, tag compilation, o atributo targetFrameworkMoniker, o nome deste atributo mudou para TargetFramework.      &lt;ul&gt;       &lt;li&gt;Este atributo, agora TargetFramework, é uma consequencia de haver um novo CLR no &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=1417197555116009067" target="_blank"&gt;framework 4.0&lt;/a&gt;. Ele indica que a compilação deve ser feita com o aspnet_compiler do 4.0 e não de versões anteriores &lt;/li&gt;        &lt;li&gt;Além disso, foi criado um conceito de profiles como target. Uma aplicação pode dizer que tem como target um determinado profile do framework. O profile é um sub-conjunto do framework como um todo que permitirá a um servidor não instalar o framework inteiro, mas apenas uma parte. As informações ainda não são muito detalhadas sobre isso. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Ainda não parece possível fazer .config transformations em websites, apenas web applications &lt;/li&gt;    &lt;li&gt;O web.config limpo prometido apenas é obtido quando utilizamos a opção para criar um novo empty web site. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_iMnxV1XbO4I/SubgwE9L5DI/AAAAAAAACmQ/xCf0-zTjx48/s1600-h/SNAG00806.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="SNAG-0080" border="0" alt="SNAG-0080" src="http://lh3.ggpht.com/_iMnxV1XbO4I/Subgw-ZNlpI/AAAAAAAACmU/5c0aD2HlbfQ/SNAG0080_thumb4.jpg?imgmax=800" width="330" height="132" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://lh5.ggpht.com/_iMnxV1XbO4I/Subgxi0kpyI/AAAAAAAACmY/pm85AGL_rQ8/s1600-h/SNAG00783.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="SNAG-0078" border="0" alt="SNAG-0078" align="right" src="http://lh4.ggpht.com/_iMnxV1XbO4I/SubgyWi404I/AAAAAAAACmc/aT7EZ21Ve_A/SNAG0078_thumb1.jpg?imgmax=800" width="187" height="247" /&gt;&lt;/a&gt;O template de website agora já vem com uma master page e traz no web.config as configurações dos providers de autenticação, profile e rolemanager, além de configurações de autorização. Limpo como prometido, mas com conteúdo direcionado a pessoas que precisam aprender mais do &lt;a href="http://www.bufaloinfo.com.br/cursos/aspnet2.asp" target="_blank"&gt;ASP.NET&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;li&gt;O template padrão também já traz uma página de login, cadastro, change password e retrieve password &lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_iMnxV1XbO4I/Subh3vtGJqI/AAAAAAAACmg/QoOSq70fHb8/s1600-h/SNAG00797.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="SNAG-0079" border="0" alt="SNAG-0079" src="http://lh5.ggpht.com/_iMnxV1XbO4I/Subh42yH5dI/AAAAAAAACmk/96jiuU_Xz0Q/SNAG0079_thumb5.jpg?imgmax=800" width="492" height="448" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;O template padrão já vem com suporte a JQuery &lt;/li&gt;    &lt;li&gt;Não vi forma padrão (“instantanea”) de adicionar suporte a &lt;a href="http://jquery.com/" target="_blank"&gt;JQuery&lt;/a&gt; em um empty web site &lt;/li&gt;    &lt;li&gt;&lt;a href="http://lh4.ggpht.com/_iMnxV1XbO4I/Subh5o_P29I/AAAAAAAACmo/VDkRqnF9uOQ/s1600-h/SNAG00736.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="SNAG-0073" border="0" alt="SNAG-0073" align="right" src="http://lh3.ggpht.com/_iMnxV1XbO4I/Subh6xsRxFI/AAAAAAAACms/N9zWBZmHM70/SNAG0073_thumb4.jpg?imgmax=800" width="148" height="259" /&gt;&lt;/a&gt; O queryExtender entrou na toolbox!       &lt;ul&gt;       &lt;li&gt;Porém apenas isso, toda sua configuração continua sendo por tags. &lt;/li&gt;        &lt;li&gt;Novas expressions para o queryextender foram criadas : ControlFilterExpression, DynamicFilterExpression, DynamicRouteExpression, OfType Expression, os 3 primeiros voltados ao DynamicData, o OfType para uma filtragem de tipo que parece bem interessante. &lt;/li&gt;        &lt;li&gt;O RouteParameter passou a ser aceito no QueryExtender. &lt;/li&gt;        &lt;li&gt;QueryExtender passou a trabalhar com EntityDataSource, mas não funciona bem com projeções, apenas quando se traz a classe inteira &lt;/li&gt;        &lt;li&gt;O bug nas querys do QueryExtender foi resolvido ou pelo menos não acontece com o entityDataSource, o que para mim dá no mesmo &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Para o DynamicData foram criados o DynamicQueryString Parameter e o DynamicControlParameter &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Vários destes tópicos merecem ser trabalhados em um artigo a parte, pode ter certeza, vão ser.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-3108317079728589041?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/6-MJBeRpyAs/vs-2010-beta-2-primeiras-impressoes.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/10/vs-2010-beta-2-primeiras-impressoes.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-6328591639454189049</guid><pubDate>Mon, 26 Oct 2009 16:48:00 +0000</pubDate><atom:updated>2009-10-26T14:53:33.602-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><title>Desinstalando o VS 2010 beta 1</title><description>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_iMnxV1XbO4I/SuXShHt4QMI/AAAAAAAAClU/SERtvqg-vOA/s1600-h/VisualStudioLogoWhiteBackground%5B2%5D.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="VisualStudioLogoWhiteBackground" border="0" alt="VisualStudioLogoWhiteBackground" align="right" src="http://lh4.ggpht.com/_iMnxV1XbO4I/SuXSnhKUfLI/AAAAAAAAClc/faNRa-RzSAc/VisualStudioLogoWhiteBackground_thumb.png?imgmax=800" width="196" height="118" /&gt;&lt;/a&gt; Hoje reclamei no &lt;a href="http://www.twitter.com" target="_blank"&gt;twitter&lt;/a&gt; que o &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=1417197555116009067" target="_blank"&gt;VS 2010&lt;/a&gt; beta 1 exige o DVD de instalação para ser desinstalado.&lt;/p&gt;  &lt;p&gt;Claro, porém, que a culpa tinha que ser minha, quem manda fazer as coisas fora de ordem ? Existe uma ordem exata, precisa e até intuitiva para desinstalar o VS 2010 beta 1, vejam só :&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;1) Desinstale o &lt;a title="TFS" href="http://msdn2.microsoft.com/en-us/teamsystem/aa718934.aspx" target="_blank"&gt;TFS&lt;/a&gt; Object Model - &lt;b&gt;Microsoft Team Foundation Server 2010 Beta 1 Object Model&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;2) Desinstale o &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=1417197555116009067" target="_blank"&gt;Visual Studio 2010&lt;/a&gt; beta 1&lt;/p&gt;    &lt;p&gt;3) Desinstale os language packs do framework 4 se estiverem instalados - &lt;b&gt;Microsoft .NET Framework 4 Extended Beta 1 - Language Pack&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;4) Desinstale os language packs do framework 4 client profile, se estiverem instalados - &lt;b&gt;Microsoft .NET Framework 4 Client Profile Beta 1 - Language Pack&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;5) Desinstale o &lt;a title=".NET" href="http://www.bufaloinfo.com.br/celulasacademicas.asp" target="_blank"&gt;&lt;a title="Framework .NET" href="http://msdn2.microsoft.com/en-us/netframework/default.aspx" target="_blank"&gt;.NET Framework&lt;/a&gt;&amp;#160;&lt;/a&gt;4 Extended - &lt;b&gt;Microsoft .NET Framework 4 Extended Beta 1&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;6) Desinstale o &lt;a title=".NET" href="http://www.bufaloinfo.com.br/celulasacademicas.asp" target="_blank"&gt;.NET&lt;/a&gt; Framework 4 Client Profile - &lt;b&gt;Microsoft .NET Framework 4 Client Profile Beta 1&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;7) Reinicie e máquina&lt;/p&gt;    &lt;p&gt;8) Desinstale o C++ - &lt;b&gt;Microsoft Visual C++ 2010 Beta 1 Redistributable&lt;/b&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Simples, fácil e intuitivo, como não acertei de primeira ?&lt;/p&gt;  &lt;p&gt;Agora deixa eu ir porque a instalação do beta 2 está pedindo para dar boot, isso porque acreditei que essa história de boot em instalação era coisa do passado&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-6328591639454189049?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/6lBZC77kdts/desinstalando-o-vs-2010-beta-1.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/10/desinstalando-o-vs-2010-beta-1.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-1773799626038632885</guid><pubDate>Mon, 26 Oct 2009 14:54:00 +0000</pubDate><atom:updated>2009-10-26T12:54:23.812-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">Vb.NET</category><category domain="http://www.blogger.com/atom/ns#">C#</category><title>Construtor Static (Shared)</title><description>&lt;p&gt;Algo disponível no framework mas que poucos conhecem ou usam é a existência de um construtor que pode ser definido como Shared (static no &lt;a href="http://msdn.microsoft.com/en-us/vcsharp/default.aspx" target="_blank"&gt;C#&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;Um construtor shared não vai ser disparado quando uma instância for criada, mas sim quando a classe for referenciada de uma forma qualquer, o que pode ser uma criação de instância mas pode ser também um acesso a um elemento (atributo, método ou propriedade) shared.&lt;/p&gt;  &lt;p&gt;O construtor shared pode ser ideal para encapsular nas classes o preenchimento dos valores iniciais das propriedades shared.&lt;/p&gt;  &lt;p&gt;Veja um exemplo de uma classe com construtor shared :&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; ClasseTeste
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; valor &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;

    &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt;()
        valor = 20
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt;&lt;/pre&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;pre class="csharpcode"&gt;Criar uma instância de ClasseTeste dispara o construtor&lt;/pre&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;pre class="csharpcode"&gt;Acessar o atributo valor dispara o construtor&lt;/pre&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;pre class="csharpcode"&gt;Definir uma variável como ClasseTeste NÃO dispara o construtor, pois a simples definição de uma variável não é uma instrução executável, apenas uma declaração.&lt;/pre&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="csharpcode"&gt;Sobre o construtor shared :&lt;/pre&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;pre class="csharpcode"&gt;Não suporta overloads e o contrario não teria sentido, de onde viriam os parâmetros ?&lt;/pre&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;pre class="csharpcode"&gt;Não suporta modificador de acesso (public/private/etc.) e o contrário realmente não faria sentido (ele nunca recebe uma chamada direta).&lt;/pre&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="csharpcode"&gt;Como sei que vão acabar pedindo, segue o mesmo código em C# :&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; winConstrutorCSharp2
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ClasseTeste
    {
        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; valor;
        &lt;span class="kwrd"&gt;static&lt;/span&gt; ClasseTeste()
        {
            valor = 20;
        }
    
    }
}&lt;/pre&gt;

&lt;p&gt;&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="#000000" face="Consolas"&gt;&lt;/font&gt;&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-1773799626038632885?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/jlCnGVu8QNo/construtor-static-shared.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/10/construtor-static-shared.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-2383730002887818837</guid><pubDate>Fri, 23 Oct 2009 18:12:00 +0000</pubDate><atom:updated>2009-10-23T16:18:38.591-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Comparacoes</category><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">Bizarro</category><category domain="http://www.blogger.com/atom/ns#">Tecnologia</category><title>Salada Mista : Termos Nossos de Cada Dia</title><description>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_iMnxV1XbO4I/SuHx9NlYoiI/AAAAAAAAClM/i0klUKATS5U/s1600-h/salada-mista%5B2%5D.jpg" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="salada-mista" border="0" alt="salada-mista" align="right" src="http://lh5.ggpht.com/_iMnxV1XbO4I/SuHx98TMM1I/AAAAAAAAClQ/_bdB9JWPndg/salada-mista_thumb.jpg?imgmax=800" width="175" height="151" /&gt;&lt;/a&gt; Quando digo que a Microsoft não sabe dar nome as coisas, muitos acham que é brincadeira. Vamos então ver como as coisas andam :&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Existe o padrão de projeto MVC e existe o &lt;a href="http://www.bufaloinfo.com.br/cursos/aspnet2.asp" target="_blank"&gt;&lt;a href="http://www.bufaloinfo.com.br/artigos/coluna46.asp" target="_blank"&gt;ASP.NET MVC&lt;/a&gt;&amp;#160;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Existe o &lt;a href="http://www.devaspnet.com.br/colunas/coluna0132.aspx" target="_blank"&gt;Ajax&lt;/a&gt; como padrão de desenvolvimento e existe o &lt;a href="http://www.bufaloinfo.com.br/cursos/aspnet2.asp" target="_blank"&gt;&lt;a href="http://www.devaspnet.com.br/colunas/coluna0132.aspx" target="_blank"&gt;ASP.NET Ajax&lt;/a&gt;&amp;#160;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Existe o SOAP como protocolo e existe o SOAP Toolkit da Microsoft&lt;/p&gt;    &lt;p&gt;Existem os webServices como padrão de desenvolvimento e existe uma tecnologia MS chamada webServices (.&lt;a title="WebServices" href="http://www.bufaloinfo.com.br/artigos/coluna05.asp" target="_blank"&gt;asmx&lt;/a&gt;) o pior foi explicar quando os .asmx foram substituidos pelo &lt;a title="WCF" href="http://msdn2.microsoft.com/en-us/netframework/aa663324.aspx" target="_blank"&gt;WCF&lt;/a&gt; que, entre outras coisas, faz webServices&lt;/p&gt;    &lt;p&gt;Existem os softwares Express (edições gratuitas de softwares) e existem os softwares Expression (para designers)&lt;/p&gt;    &lt;p&gt;Existem máquinas virtuais (Framework.NET e JVM) e máquinas virtuais (virtual PC e vmware)&lt;/p&gt;    &lt;p&gt;Virtual PC e Windows Virtual PC são coisas diferentes&lt;/p&gt;    &lt;p&gt;O SQLDataSource acessa qualquer servidor de dados e não só &lt;a title="SQL Server 2008" href="http://www.microsoft.com/sql/2008/default.mspx" target="_blank"&gt;SQL Server&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Existe o SQL linguagem e o SQL Server servidor da Microsoft&lt;/p&gt;    &lt;p&gt;Linq e &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=3570594778890055322" target="_blank"&gt;LinqToSQL&lt;/a&gt; são coisas totalmente diferentes&lt;/p&gt;    &lt;p&gt;Existe o ASP e o &lt;a href="http://www.bufaloinfo.com.br/cursos/aspnet2.asp" target="_blank"&gt;ASP.NET&lt;/a&gt; (quando alguém diz : Programo em ASP, a qual se refere ?)&lt;/p&gt;    &lt;p&gt;Existe o Visual Basic e existe o Visual Basic .NET que só ganhou o “.NET” no nome do VB por força de mercado&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-2383730002887818837?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/XKnl6S51zPY/salada-mista-termos-nossos-de-cada-dia.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/10/salada-mista-termos-nossos-de-cada-dia.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-965945425284378235</guid><pubDate>Fri, 23 Oct 2009 12:19:00 +0000</pubDate><atom:updated>2009-10-23T10:19:48.911-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">betas</category><title>Impressões sobre o VS 2010</title><description>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_iMnxV1XbO4I/SuGfXbw8hsI/AAAAAAAAClE/fd6i-_5WIA8/s1600-h/VisualStudioLogoWhiteBackground%5B2%5D.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="VisualStudioLogoWhiteBackground" border="0" alt="VisualStudioLogoWhiteBackground" align="right" src="http://lh6.ggpht.com/_iMnxV1XbO4I/SuGfY1KlztI/AAAAAAAAClI/IySBtv3Y8gM/VisualStudioLogoWhiteBackground_thumb.png?imgmax=800" width="196" height="118" /&gt;&lt;/a&gt; Ele é muito, muito lento, mas usa um sistema de cache de imagens ou algo parecido de forma que depois de alguns minutos de uso ele fica veloz.&lt;/p&gt;  &lt;p&gt;O cache de imagens ainda gera bugs, mostrando pequenos flashs fora do lugar. Imagine você criando um projeto web novo e de repente vê um flash da tela do último projeto web que fez.&lt;/p&gt;  &lt;p&gt;O QueryExtender ainda não funciona com o EntityDataSource ( &lt;a title="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=464001&amp;amp;wa=wsignin1.0" href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=464001&amp;amp;wa=wsignin1.0"&gt;https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=464001&amp;amp;wa=wsignin1.0&lt;/a&gt; ) (! :-( )&lt;/p&gt;  &lt;p&gt;Falta criarem uma routedExpression para o QueryExtender&lt;/p&gt;  &lt;p&gt;As config transformations só funcionam em webApplication&lt;/p&gt;  &lt;p&gt;Não erre as config transformations. Não erre ! Um bug faz com que não seja possível voltar atrás.&lt;/p&gt;  &lt;p&gt;$RoutedURL aparentemente não funciona dinamicamente para, por exemplo, gerar as URLs de detalhes dentro de uma gridview. Alguma coisa precisará ser adaptada, apostaria na HyperlinkColumn&lt;/p&gt;  &lt;p&gt;A quebra de linhas no VB funciona, mas quando feita depois da linha pronta. Se realizada durante a digitação, quebra o intellissense.&lt;/p&gt;  &lt;p&gt;Filtros com queryextender baseados em dropdownlist podem gerar resultados inteiramente inesperados.&lt;/p&gt;  &lt;p&gt;Logo testarei tudo isso na versão beta 2 e atualizo este post.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-965945425284378235?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/-3UEXVkjEo4/impressoes-sobre-o-vs-2010.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/10/impressoes-sobre-o-vs-2010.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-7168500066737112438</guid><pubDate>Fri, 23 Oct 2009 11:01:00 +0000</pubDate><atom:updated>2009-10-23T09:01:37.350-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">betas</category><title>Utilizando QueryExtender no VS 2010</title><description>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_iMnxV1XbO4I/SuGNCrioOxI/AAAAAAAACk8/FWvxzNfJ6Ko/s1600-h/VisualStudioLogoWhiteBackground%5B2%5D.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="VisualStudioLogoWhiteBackground" border="0" alt="VisualStudioLogoWhiteBackground" align="right" src="http://lh4.ggpht.com/_iMnxV1XbO4I/SuGNDwvjn3I/AAAAAAAAClA/QVxcO2APe08/VisualStudioLogoWhiteBackground_thumb.png?imgmax=800" width="196" height="118" /&gt;&lt;/a&gt; Não, este post não é para falar extensamente sobre o uso do QueryExtender no &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=1417197555116009067" target="_blank"&gt;VS 2010&lt;/a&gt;. O motivo deste post é deixar registrado um pequeno truque :&lt;/p&gt;  &lt;p&gt;Na versão Beta 1 do VS 2010 falta uma referência ao assembly que guarda as classes ligadas ao QueryExtender (sim, &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=5795967063559567956" target="_blank"&gt;o mesmo web.config que prometeram limpar&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;Assim sendo, para que o QueryExtender funcione você precisa adicionar a seguinte tag :&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;add tagPrefix=&amp;quot;asp&amp;quot; &lt;/p&gt;    &lt;p&gt;namespace=&amp;quot;System.Web.UI.WebControls.Expressions&amp;quot; &lt;/p&gt;    &lt;p&gt;assembly=&amp;quot;System.Web.Extensions, Version=4.0.0.0, &lt;/p&gt;    &lt;p&gt;Culture=neutral, PublicKeyToken=31BF3856AD364E35&amp;quot; /&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Dentro de &amp;lt;pages&amp;gt;&amp;lt;controls&amp;gt;&amp;lt;/controls&amp;gt;&amp;lt;/pages&amp;gt;, do contrário você receberá a mensagem&lt;/p&gt;  &lt;h6&gt;Unknown server tag ‘asp:SearchExpression’&lt;/h6&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-7168500066737112438?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/I_VdnZ7PxBA/utilizando-queryextender-no-vs-2010.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/10/utilizando-queryextender-no-vs-2010.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-6201733322312345006</guid><pubDate>Wed, 21 Oct 2009 20:57:00 +0000</pubDate><atom:updated>2009-10-21T18:57:42.529-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">Noticias</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><category domain="http://www.blogger.com/atom/ns#">Entity Framework</category><title>VS 2010 e Framework 4.0 beta 2 *com training kit*</title><description>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_iMnxV1XbO4I/St91vyGkJrI/AAAAAAAACk0/GcC7bsYJQBo/s1600-h/VisualStudioLogoWhiteBackground%5B2%5D.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="VisualStudioLogoWhiteBackground" border="0" alt="VisualStudioLogoWhiteBackground" align="right" src="http://lh5.ggpht.com/_iMnxV1XbO4I/St91xak0ucI/AAAAAAAACk4/EdzlBNxOM9U/VisualStudioLogoWhiteBackground_thumb.png?imgmax=800" width="196" height="118" /&gt;&lt;/a&gt; O assunto da semana é a disponibilização da versão beta 2 do &lt;a title="Visual Studio 2008" href="http://msdn2.microsoft.com/en-gb/vstudio/default.aspx" target="_blank"&gt;&lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=1417197555116009067" target="_blank"&gt;Visual Studio 2010&lt;/a&gt; e&lt;/a&gt; &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=1417197555116009067" target="_blank"&gt;Framework 4.0&lt;/a&gt; beta 2.&lt;/p&gt;  &lt;p&gt;Na 2a feira ambos foram disponibilizados para assinantes MSDN e a promessa é que nesta 4a feira (dando-se o devido desconto de fusos horários).&lt;/p&gt;  &lt;p&gt;O &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=1417197555116009067" target="_blank"&gt;Visual Studio 2010&lt;/a&gt; beta 2 vem com designers para o &lt;a href="http://www.bufaloinfo.com.br/artigos/coluna46.asp" target="_blank"&gt;ASP.NET MVC&lt;/a&gt; e &lt;a title="Silverlight" href="http://www.microsoft.com/silverlight/" target="_blank"&gt;Silverlight&lt;/a&gt; 3 integrados, 2 das grandes vedetes do mercado (não que eu concorde). Na parte de Team Foundation os recursos para metodologias ágeis foram muito comentados no &lt;a href="http://www.twitter.com" target="_blank"&gt;twitter&lt;/a&gt;. Já o &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=2331416935501773711" target="_blank"&gt;Entity Framework 2.0 fez uma enrolação&lt;/a&gt; e não se sabe claramente se está ou não incluido neste beta 2.&lt;/p&gt;  &lt;p&gt;O mais interessante é que logo que lançaram o beta 2 disponibilizaram também o Training Kit de outubro para o framework 4.0, training kit esse que com certeza já explora recursos novos disponíveis apenas no beta 2.&lt;/p&gt;  &lt;p&gt;O training kit tipicamente contém muitos exemplos e how-tos sobre o novo software, ótima forma de começar a explorar a nova tecnologia.&lt;/p&gt;  &lt;p&gt;Baixe o &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=752cb725-969b-4732-a383-ed5740f02e93&amp;amp;displayLang=en" target="_blank"&gt;Visual Studio 2010 training kit de outubro&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-6201733322312345006?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/UUyerm5yut8/vs-2010-e-framework-40-beta-2-com.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/10/vs-2010-e-framework-40-beta-2-com.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-5197604033178488841</guid><pubDate>Wed, 21 Oct 2009 16:55:00 +0000</pubDate><atom:updated>2009-10-21T14:55:12.808-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">Vb.NET</category><category domain="http://www.blogger.com/atom/ns#">C#</category><title>Os Segredos do Protected Internal (friend)</title><description>&lt;p&gt; Essas duas definições de escopo para nossos métodos funcionam separadamente :&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Protected :&lt;/strong&gt; Faz com que apenas as classes filhas possam acessar o método&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Internal (Friend no VB)&lt;/strong&gt; : Faz com que o método apenas possa ser acessado dentro do mesmo assembly em que foi criado.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Ocorre que o framework permite fazer a combinação das duas definições, criando um método “protected internal”. Porém existe uma confusão muito comum : &lt;em&gt;Todos acham que “protected internal” significa protected E internal mas na verdade protected internal significa protected OU internal.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Fiz uma tabela abaixo listando 4 diferentes situações de acesso ao método. Nas duas primeiras, podemos observar que é como se ambos – protected e internal – estivessem sendo atendidos, mas nas duas últimas vemos que apenas um deles é atendido, fazendo valer o “OU”&lt;/p&gt;  &lt;table border="2" cellspacing="0" cellpadding="2" width="517"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="292"&gt;Utilização&lt;/td&gt;        &lt;td valign="top" width="101"&gt;Funciona&lt;/td&gt;        &lt;td valign="top" width="66"&gt;Protected&lt;/td&gt;        &lt;td valign="top" width="54"&gt;Internal&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="292"&gt;Instância da classe em outro projeto&lt;/td&gt;        &lt;td valign="top" width="101"&gt;não&lt;/td&gt;        &lt;td valign="top" width="66"&gt;sim&lt;/td&gt;        &lt;td valign="top" width="54"&gt;sim&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="292"&gt;Classe filha no mesmo projeto&lt;/td&gt;        &lt;td valign="top" width="101"&gt;não&lt;/td&gt;        &lt;td valign="top" width="66"&gt;sim&lt;/td&gt;        &lt;td valign="top" width="54"&gt;sim&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="292"&gt;Instância da classe no mesmo projeto&lt;/td&gt;        &lt;td valign="top" width="101"&gt;sim&lt;/td&gt;        &lt;td valign="top" width="66"&gt;não&lt;/td&gt;        &lt;td valign="top" width="54"&gt;sim&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="292"&gt;Classe filha em outro projeto&lt;/td&gt;        &lt;td valign="top" width="101"&gt;sim&lt;/td&gt;        &lt;td valign="top" width="66"&gt;sim&lt;/td&gt;        &lt;td valign="top" width="54"&gt;não&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Veja abaixo um código de exemplo demonstrando a tabela acima. Uma solução com 2 projetos, LibTesteProtected e WinTesteProtected, sendo que o WinTesteProtected faz referência ao LibTesteProtected.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cid-9939f08dfb6d1298.skydrive.live.com/self.aspx/P%c3%bablico/TestesProtected.zip" target="_blank"&gt;Baixe o código fonte&lt;/a&gt;&lt;/p&gt; &lt;span id="fullpost"&gt;   &lt;p&gt;&lt;strong&gt;LibTesteProtected – Calcular.VB&lt;/strong&gt;&lt;/p&gt;    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; Calcular

    &lt;span class="kwrd"&gt;Protected&lt;/span&gt; &lt;span class="kwrd"&gt;Friend&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; FazCalculo(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; X &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Decimal&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Decimal&lt;/span&gt;
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; X * 2
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;

&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;&lt;/pre&gt;

  &lt;p&gt;&lt;strong&gt;LibTesteProtected – Calculo2.VB&lt;/strong&gt;&lt;/p&gt;

  &lt;p&gt;(repare que não existe herança, portanto o acesso não deveria ser permitido)&lt;/p&gt;

  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; Calculo2

    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; fazcalculo(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; x &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Decimal&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Decimal&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; obj &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; Calcular
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; obj.FazCalculo(x)
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;

&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt;&lt;/pre&gt;
  &lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

  &lt;p&gt;&lt;strong&gt;WinTesteProtected – Calcular3.VB&lt;/strong&gt;&lt;/p&gt;

  &lt;p&gt;(repare que por ser friend, o acesso não deveria ser permitido)&lt;/p&gt;

  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; Calcular3
    &lt;span class="kwrd"&gt;Inherits&lt;/span&gt; LibTesteProtected.Calcular

    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; fazercalculo2(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; x &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Decimal&lt;/span&gt;)
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; &lt;span class="kwrd"&gt;Me&lt;/span&gt;.FazCalculo(x)
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt;&lt;/pre&gt;
  &lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

  &lt;p&gt;&lt;strong&gt;WinTesteProtected – Form1.vb&lt;/strong&gt;&lt;/p&gt;

  &lt;p&gt;(dois botões para testar as 2 classes. A principal não funcionaria)&lt;/p&gt;

  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; Form1

    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; cmdCalcular2_Click(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; sender &lt;span class="kwrd"&gt;As&lt;/span&gt; System.&lt;span class="kwrd"&gt;Object&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; System.EventArgs) &lt;span class="kwrd"&gt;Handles&lt;/span&gt; cmdCalcular2.Click
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; obj &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; LibTesteProtected.Calculo2
        MsgBox(obj.fazcalculo(30))
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;

    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; cmdCalcular3_Click(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; sender &lt;span class="kwrd"&gt;As&lt;/span&gt; System.&lt;span class="kwrd"&gt;Object&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; System.EventArgs) &lt;span class="kwrd"&gt;Handles&lt;/span&gt; cmdCalcular3.Click
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; obj &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; Calcular3
        MsgBox(obj.fazercalculo2(30))
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt;&lt;/pre&gt;

  &lt;p&gt;&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;

  &lt;p&gt;Como sei que alguém vai pedir, mais abaixo o mesmo exemplo em &lt;a href="http://msdn.microsoft.com/en-us/vcsharp/default.aspx" target="_blank"&gt;C#&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;LibCTesteProtected – Calcular.CS&lt;/strong&gt;&lt;/p&gt;

  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; LibCTesteProtected
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Calcular
    {
        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;decimal&lt;/span&gt; FazCalculo(&lt;span class="kwrd"&gt;decimal&lt;/span&gt; x)
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; (x * 2);
        }
    }
}&lt;/pre&gt;
  &lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

  &lt;p&gt;&amp;#160;&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;LibCTesteProtected – Calcular2.CS&lt;/strong&gt;&lt;/p&gt;

  &lt;p&gt;(repare que não existe herança, portanto o acesso não deveria ser permitido)&lt;/p&gt;

  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; LibCTesteProtected
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Calcular2
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;decimal&lt;/span&gt; FazCalculo2(&lt;span class="kwrd"&gt;decimal&lt;/span&gt; x)
        {
            Calcular obj = &lt;span class="kwrd"&gt;new&lt;/span&gt; Calcular();
            &lt;span class="kwrd"&gt;return&lt;/span&gt; obj.FazCalculo(x);
        }
    }
}&lt;/pre&gt;
  &lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

  &lt;p&gt;&lt;strong&gt;WinCTesteProtected – Calcular3.CS&lt;/strong&gt;&lt;/p&gt;

  &lt;p&gt;(repare que por ser internal, o acesso não deveria ser permitido)&lt;/p&gt;

  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; winCTesteProtected
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Calcular3 : LibCTesteProtected.Calcular 
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;decimal&lt;/span&gt; FazerCalculo2(&lt;span class="kwrd"&gt;decimal&lt;/span&gt; x)
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.FazCalculo(x);
        }
    }
}&lt;/pre&gt;
  &lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

  &lt;p&gt;&lt;strong&gt;WinCTesteProtected – Form1.CS&lt;/strong&gt;&lt;/p&gt;

  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.ComponentModel;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Drawing;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Forms;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; winCTesteProtected
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Form1 : Form
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; Form1()
        {
            InitializeComponent();
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; cmdCalcular2_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
        {
            LibCTesteProtected.Calcular2 obj = 
                &lt;span class="kwrd"&gt;new&lt;/span&gt; LibCTesteProtected.Calcular2();

            MessageBox.Show(obj.FazCalculo2(30).ToString());
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; cmdCalcular3_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
        {
            Calcular3 obj =
                &lt;span class="kwrd"&gt;new&lt;/span&gt; Calcular3();

            MessageBox.Show(obj.FazerCalculo2(30).ToString());
        }
    }
}&lt;/pre&gt;
  &lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/span&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-5197604033178488841?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/AwjstLpVTF4/os-segredos-do-protected-internal.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/10/os-segredos-do-protected-internal.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-5795967063559567956</guid><pubDate>Thu, 15 Oct 2009 18:07:00 +0000</pubDate><atom:updated>2009-10-15T15:07:16.142-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><title>ASP.NET 4.0 : Um novo Web.Config</title><description>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_iMnxV1XbO4I/StdkwprGKBI/AAAAAAAACkQ/ZJn8Gfvo9ls/s1600-h/10309-aspnet_logo%5B2%5D.gif" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="10309-aspnet_logo" border="0" alt="10309-aspnet_logo" align="right" src="http://lh6.ggpht.com/_iMnxV1XbO4I/Stdkxe5Zo5I/AAAAAAAACkU/QJKW5bDBBfc/10309-aspnet_logo_thumb.gif?imgmax=800" width="192" height="59" /&gt;&lt;/a&gt; Desde o ASP.NET 2.0 os arquivos machine.config e web.config globais são os mesmos arquivos da versão 2.0, inclusive encontramos estes arquivos na pasta da versão 2.0 em windows\Microsoft.NET\Framework\&amp;lt;versão&amp;gt;\CONFIG&lt;/p&gt;  &lt;p&gt;Vários recursos foram adicionados ao desenvolvimento web desde então, tal como &lt;a href="http://www.devaspnet.com.br/colunas/coluna0132.aspx" target="_blank"&gt;Ajax&lt;/a&gt; (3.5), &lt;a href="http://www.asp.net/DynamicData/" target="_blank"&gt;Dynamic Data&lt;/a&gt; (3.5 sp 1), Routing (4.0) entre outros&lt;/p&gt;  &lt;p&gt;Estes novos recursos fazem uso de httpmodules e httphandlers que precisam ser configurados no arquivo web.config. Para tanto, até o momento era feito uso dos template do &lt;a title="Visual Studio 2008" href="http://msdn2.microsoft.com/en-gb/vstudio/default.aspx" target="_blank"&gt;visual studio&lt;/a&gt;, de forma que quando criamos uma aplicação web ela já traz o web.config com estes handlers e modules.&lt;/p&gt;  &lt;p&gt;O ponto negativo disso é o fato do web.config ter ficado muito cheio com tags que muitos desenvolvedores não compreendem, se tornando um arquivo difícil de decifrar.&lt;/p&gt;  &lt;p&gt;A partir do &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=1417197555116009067" target="_blank"&gt;Framework 4.0&lt;/a&gt;, teremos novos arquivos globais que já conterão a configuração destes recursos, fazendo com que o web.config do framework 4.0 fique muito mais limpo.&lt;/p&gt;  &lt;p&gt;Veja como ficará o web.config :&lt;/p&gt; &lt;span id="fullpost"&gt;   &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_iMnxV1XbO4I/StdkyWDAQ1I/AAAAAAAACkY/6kgamBkVPWQ/s1600-h/vs20105.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="vs2010" border="0" alt="vs2010" src="http://lh6.ggpht.com/_iMnxV1XbO4I/Stdk0lqoarI/AAAAAAAACkc/QmUtaMeBkz0/vs2010_thumb3.png?imgmax=800" width="504" height="267" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;Nem tudo são flores : Como consequencia teremos mais modules e handlers rodando em uma aplicação do que a aplicação necessariamente precisa e caberá ao desenvolvedor fazer o trabalho inverso : Retirar aquilo que não é necessário para garantir a otimização.&lt;/p&gt;    &lt;p&gt;Ainda não é possivel testar isso em detalhes, pois o beta 1 disponível ao público ainda não traz o web.config limpo anunciado no blog do ScottGu&lt;/p&gt;    &lt;p&gt;Esses novos arquivos globais se tornaram possíveis porque o &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=6135239270054107598" target="_blank"&gt;.NET 4.0 traz um novo CLR&lt;/a&gt;, que rodará em paralelo com as versões anteriores (2.0 no caso). As consequencias disso merecem &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=6135239270054107598" target="_blank"&gt;um post a parte.&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a title="http://weblogs.asp.net/scottgu/archive/2009/08/25/clean-web-config-files-vs-2010-and-net-4-0-series.aspx" href="http://weblogs.asp.net/scottgu/archive/2009/08/25/clean-web-config-files-vs-2010-and-net-4-0-series.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2009/08/25/clean-web-config-files-vs-2010-and-net-4-0-series.aspx&lt;/a&gt;&lt;/p&gt; &lt;/span&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-5795967063559567956?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/tojwgGagBaM/aspnet-40-um-novo-webconfig.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/10/aspnet-40-um-novo-webconfig.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-6135239270054107598</guid><pubDate>Thu, 15 Oct 2009 16:31:00 +0000</pubDate><atom:updated>2009-10-15T15:14:55.373-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><title>.NET 4.0 terá novo CLR</title><description>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_iMnxV1XbO4I/StdN5tglL9I/AAAAAAAACjo/ocsHTsDIHcM/s1600-h/VisualStudioLogoWhiteBackground%5B2%5D.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="VisualStudioLogoWhiteBackground" border="0" alt="VisualStudioLogoWhiteBackground" align="right" src="http://lh5.ggpht.com/_iMnxV1XbO4I/StdN835evkI/AAAAAAAACjs/l_CFrQEfk9U/VisualStudioLogoWhiteBackground_thumb.png?imgmax=800" width="196" height="118" /&gt;&lt;/a&gt; Pode parecer a primeira vista um título estranho, mas é exatamente isso que significa : teremos uma nova versão do CLR.&lt;/p&gt;  &lt;p&gt;Como assim ? Não é isso que esperávamos com o .NET 4.0 ?&lt;/p&gt;  &lt;p&gt;Na verdade, não. A última vez em que tivemos uma nova versão do CLR foi na passagem do &lt;a title="Framework .NET" href="http://www.bufaloinfo.com.br/celulasacademicas.asp" target="_blank"&gt;Framework .NET&lt;/a&gt; 1.1 para 2.0. A mudança de versão do CLR exige uma migração das aplicações de uma versão para outra, assim sendo quando o &lt;a title="Visual Studio 2008" href="http://msdn2.microsoft.com/en-gb/vstudio/default.aspx" target="_blank"&gt;&lt;/a&gt;&lt;a title="Visual Studio 2005" href="http://msdn2.microsoft.com/pt-br/vs2005/default(en-us).aspx" target="_blank"&gt;Visual Studio 2005&lt;/a&gt;,&lt;/a&gt; ou mais atualmente o &lt;a title="Visual Studio 2008" href="http://msdn2.microsoft.com/en-gb/vstudio/default.aspx" target="_blank"&gt;&lt;/a&gt;&lt;a title="Visual Studio 2008" href="http://msdn2.microsoft.com/pt-br/vs2008/default(en-us).aspx" target="_blank"&gt;Visual Studio 2008&lt;/a&gt;,&lt;/a&gt; abrem um projeto da versão 1.1 (visual studio 2003), é executado um wizard que realiza a migração de uma versão para outra.&lt;/p&gt;  &lt;p&gt;Todo processo de migração é trabalhoso, instável, exigindo novos testes da aplicação para garantir seu adequado funcionamento. Por isso, após o lançamento do framework 2.0, a Microsoft passou a apenas criar funcionalidades adicionais para o framework .NET, sem realizar mudanças no CLR, o núcleo do framework.&lt;/p&gt;  &lt;p&gt;Assim foi com o framework 3.0 e 3.5. Desta forma utilizar o framework 3.0, 3.5 ou 2.0 na verdade significa estar utilizando a mesma máquina virtual, o mesmo CLR, o CLR do framework 2.0, utilizando-se bibliotecas de framework mais recentes ou não, mas o núcleo do 2.0.&lt;/p&gt;  &lt;p&gt;Este uso de um CLR único em 3 versões do framework trouxe várias vantagens. Estas vantagens não existirão com o &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=1417197555116009067" target="_blank"&gt;framework 4.0&lt;/a&gt; devido a este utilizar um novo CLR. Vamos então analisar estas diferenças e o impacto que terão no processo de desenvolvimento.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Migração&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_iMnxV1XbO4I/StdODtOkyiI/AAAAAAAACjw/n0pySnIuBnc/s1600-h/SNAG-0042%5B5%5D.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="SNAG-0042" border="0" alt="SNAG-0042" align="right" src="http://lh6.ggpht.com/_iMnxV1XbO4I/StdOEzvn-mI/AAAAAAAACj0/oSWPPhgwHQE/SNAG-0042_thumb%5B3%5D.jpg?imgmax=800" width="351" height="281" /&gt;&lt;/a&gt; Um novo CLR exigiria uma ferramenta ou pelo menos um wizard de migração. Porém no Visual Studio 2008 a Microsoft já havia habituado os desenvolvedores a utilizarem o próprio VS para determinar para qual framework a aplicação seria desenvolvida.&lt;/p&gt;    &lt;p&gt;Portanto, para tornar a passagem para o framework 4 algo natural, o &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=1417197555116009067" target="_blank"&gt;visual studio 2010&lt;/a&gt; continua utilizando o mesmo recurso de determinação do framework “target” da aplicação. A única diferença que é possível observar é que ao mudar o “target” no visual studio 2010 ele faz questão de fechar o projeto e abrir novamente, o que não acontecia no VS 2008.&lt;/p&gt;    &lt;p&gt;Faz total sentido. No VS 2008 o target servia apenas para que o VS apontasse trechos de código que não funcionam naquela versão do framework indicada. Porém com um CLR novo, a mudança do target para o 4.0 ou de volta a um anterior exige corrigir referências de projeto entre outros detalhes, portanto sendo necessário fechar e abrir novamente o projeto.&lt;/p&gt; &lt;/blockquote&gt; &lt;span id="fullpost"&gt;   &lt;p&gt;&lt;strong&gt;Bin Deploy&lt;/strong&gt;&lt;/p&gt;    &lt;blockquote&gt;     &lt;p&gt;Aplicações construidas com framework 3.0 ou 3.5 podem ser hospedadas em provedores que apenas tenham o framework 2.0, aplicando-se o chamado bin deploy : Todos os assemblies adicionais que não fazem parte do framework 2.0 são copiados para a pasta bin da aplicação.&lt;/p&gt;      &lt;p&gt;Salvo em eventuais problemas com &lt;a title="CAS" href="http://www.bufaloinfo.com.br/artigos/artigo0910.asp" target="_blank"&gt;CAS&lt;/a&gt;, o bin deploy funcionava de forma que os desenvolvedores não precisavam ficar correndo atrás de provedores que houvessem se atualizado.&lt;/p&gt;      &lt;p&gt;Para o framework 4.0, nada de Bin deploy. Por ter uma nova versão do CLR, o framework 4.0 precisa ser instalado no servidor do provedor, um simples processo de bin deploy não funcionará.&lt;/p&gt;   &lt;/blockquote&gt;    &lt;p&gt;&lt;strong&gt;Configuração do IIS&lt;/strong&gt;&lt;/p&gt;    &lt;blockquote&gt;     &lt;p&gt;Os sites no IIS possuem uma configuração para determinar qual versão de framework rodarão. Temos a configuração para 1.1 e 2.0, mas nunca existiu configuração para 3.0 ou 3.5, exatamente porque essas duas versões de framework não trouxeram nova versão do CLR, portanto o site configurado para versão 2.0 rodaria qualquer versão até a 3.5 SP 1.&lt;/p&gt;      &lt;p&gt;Com uma nova versão de CLR na 4.0, temos uma nova configuração do IIS, portanto os sites no IIS precisarão ser configurados ou para a versão 2.0 ou 4.0, deixando a execução menos flexivel do que antes.&lt;/p&gt;      &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_iMnxV1XbO4I/StdOGwhV4KI/AAAAAAAACj4/VfOL22rTgc4/s1600-h/SNAG00074.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="SNAG-0007" border="0" alt="SNAG-0007" src="http://lh4.ggpht.com/_iMnxV1XbO4I/StdOIzlljbI/AAAAAAAACj8/S3IofYebCek/SNAG0007_thumb2.jpg?imgmax=800" width="332" height="300" /&gt;&lt;/a&gt; &lt;/p&gt;   &lt;/blockquote&gt;    &lt;p&gt;&lt;strong&gt;Execução entre versões&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;O que aconteceria se um site na versão 4.0 chamar uma class library na versão 2 ? Ou um site na vesão 2.0 chamar uma class library na versão 4.0 ?&lt;/p&gt;    &lt;blockquote&gt;     &lt;p&gt;&lt;strong&gt;Site em 4.0, Class Library em 2.0&lt;/strong&gt;&lt;/p&gt;      &lt;p&gt;Recebemos uma mensagem de que a referência de projetos não pode ser realizada e precisa ser substituida por uma referência baseada em arquivos. &lt;/p&gt;      &lt;p&gt;Tudo roda no application domain do site web, ou seja, como 4.0, portanto a dll, compilada originalmente com o framework 2.0, será processada de fato pelo runtime do framework 4.0&lt;/p&gt;      &lt;p&gt;Isso pode vir a causar problemas de incompatibilidade durante a execução das classes originalmente compiladas em 2.0 devido a eventuais mudanças nas classes do framework.&lt;/p&gt;      &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_iMnxV1XbO4I/StdOKcJRpFI/AAAAAAAACkA/Mv0ZOc5yokk/s1600-h/SNAG00094.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="SNAG-0009" border="0" alt="SNAG-0009" src="http://lh3.ggpht.com/_iMnxV1XbO4I/StdOO5JYwmI/AAAAAAAACkE/MJ489YEZYU0/SNAG0009_thumb2.jpg?imgmax=800" width="410" height="347" /&gt;&lt;/a&gt; &lt;/p&gt;      &lt;p&gt;&lt;strong&gt;Site em 2.0, Class Library em 4.0&lt;/strong&gt;&lt;/p&gt;      &lt;p&gt;Recebemos um alerta de que a referência poderá causar problemas e de fato causa : A compilação do site falha, pois a class library tem referência para a versão 4.0 do CLR e o site tenta fazer a execução na versão 2.0.&lt;/p&gt;      &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_iMnxV1XbO4I/StdORJkNxRI/AAAAAAAACkI/2XB4d9eMFrU/s1600-h/SNAG00104.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="SNAG-0010" border="0" alt="SNAG-0010" src="http://lh3.ggpht.com/_iMnxV1XbO4I/StdOUIz7VwI/AAAAAAAACkM/3Oyq_3aUkrQ/SNAG0010_thumb2.jpg?imgmax=800" width="414" height="350" /&gt;&lt;/a&gt; &lt;/p&gt;      &lt;p&gt;&lt;strong&gt;Resultado&lt;/strong&gt;&lt;/p&gt;      &lt;p&gt;1) Precisa haver um processo de migração planejado para a versão 4.0, esse processo de migração deve começar na camada de interface para em seguida passar para as class libraries&lt;/p&gt;      &lt;p&gt;2) Testes cuidadosos devem fazer parte do processo de migração e devem ser analisadas as diferenças que forem documentadas entre os frameworks&lt;/p&gt;      &lt;p&gt;3) Caso seja necessário fazer a migração ao contrário (primeiro as classes, depois a interface) torna-se necessário criar uma camada intermediária utilizando serviços &lt;a title="WCF" href="http://msdn2.microsoft.com/en-us/netframework/aa663324.aspx" target="_blank"&gt;WCF&lt;/a&gt; de forma que as classes rodem isoladamente e não dentro do site.&lt;/p&gt;   &lt;/blockquote&gt;    &lt;p&gt;&lt;strong&gt;Arquivos .CONFIG&lt;/strong&gt;&lt;/p&gt;    &lt;blockquote&gt;     &lt;p&gt;Desde a versão 2.0 os arquivos .CONFIG globais, que ficam nas pastas de instalação do framework, são os arquivos que são gerados pela versão 2.0, machine.config e web.config.&lt;/p&gt;      &lt;p&gt;Com a versão 4.0 o nome dos arquivos continua o mesmo, mas agora pertencem ao framework 4.0. &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=5795967063559567956" target="_blank"&gt;Existem algumas vantagens na separação dos arquivos .CONFIG&lt;/a&gt;, porém também existem desvantagens : Com o framework 2.0 e 4.0 rodando lado a lado em um servidor web o administrador do servidor precisará ter cuidado com a configuração de ambas as versões.&lt;/p&gt;   &lt;/blockquote&gt;    &lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;    &lt;blockquote&gt;     &lt;p&gt;O surgimento de um novo CLR no framework 4.0 traz várias mudanças que apesar de serem pouco comentadas terão um impacto considerável na adoção do framework 4.0&lt;/p&gt;   &lt;/blockquote&gt; &lt;/span&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-6135239270054107598?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/7lcGBY9DhYg/net-40-tera-novo-clr.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/10/net-40-tera-novo-clr.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-8803622224747005302</guid><pubDate>Tue, 29 Sep 2009 05:17:00 +0000</pubDate><atom:updated>2009-09-29T02:17:26.603-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Eventos</category><category domain="http://www.blogger.com/atom/ns#">.NET</category><title>Evento na Estácio de Nova Iguaçu</title><description>&lt;p&gt;No dia 19 fui palestrar em Rio Claro, porém de última hora surgiu um evento a ser realizado no mesmo dia na Estácio Nova Iguaçu.&lt;/p&gt;  &lt;p&gt;Depois de muitos encontros e desencontros, Luciano Reis foi realizar o evento na Estácio de Nova Iguaçu e Carlinda foi na Estácio levar nossos brindes para os alunos, todos gostaram muito e o evento foi um sucesso.&lt;/p&gt;  &lt;p&gt;Sem dúvida foi uma aventura inesperada, mas não inédita, realizar o evento em Rio Claro simultaneamente com o evento em Nova Iguaçu.&lt;/p&gt;  &lt;p&gt;Vejam as fotos do evento : &lt;a href="http://www.facebook.com/album.php?aid=154843&amp;amp;id=763439605&amp;amp;l=cb489a95d1"&gt;http://www.facebook.com/album.php?aid=154843&amp;amp;id=763439605&amp;amp;l=cb489a95d1&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-8803622224747005302?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/dXoJlFeZ13s/evento-na-estacio-de-nova-iguacu.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/09/evento-na-estacio-de-nova-iguacu.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-170143630979866018</guid><pubDate>Tue, 29 Sep 2009 01:47:00 +0000</pubDate><atom:updated>2009-09-28T22:47:09.149-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Eventos</category><category domain="http://www.blogger.com/atom/ns#">Windows 7</category><category domain="http://www.blogger.com/atom/ns#">SQLServer</category><title>Circuito de TI do Senac</title><description>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_iMnxV1XbO4I/SsFnFWVk26I/AAAAAAAACjg/I6Pjkf1elQ0/s1600-h/SQL%5B2%5D.jpg" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="SQL" border="0" alt="SQL" align="right" src="http://lh4.ggpht.com/_iMnxV1XbO4I/SsFnGfQ1QvI/AAAAAAAACjk/NQ4o9wowqiU/SQL_thumb.jpg?imgmax=800" width="116" height="151" /&gt;&lt;/a&gt; Nos dias 21 e 22 de setembro participamos do circuito de TI do Senac. Dia 21 Laércio Simões palestrou sobre o &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=5654354285488990160" target="_blank"&gt;Windows 7&lt;/a&gt; e dia 22 palestrei sobre &lt;a title="SQL Server 2008" href="http://www.microsoft.com/sql/2008/default.mspx" target="_blank"&gt;&lt;/a&gt;&lt;a title="SQL Server 2008" href="http://www.microsoft.com/sqlserver/2008/en/us/default.aspx" target="_blank"&gt;SQL Server 2008&lt;/a&gt;&amp;#160;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Primeira vez que faço Rio-SP de avião, mas os preços da WebJet realmente estão mais baratos do que uma passagem de ônibus da 1001. É verdade que os vôos são para Guarulhos, mas de Guarulhos para o Tietê conseguir transporte é fácil (apesar de um pouco caro).&lt;/p&gt;  &lt;p&gt;O ônibus executivo de Guarulos para o Tietê custa R$ 30,00 mas tem mesa para trabalho com&amp;#160; notebook e wireless vex dentro do ônibus, nem da para perceber o tempo passando. Certamente tem opções mais baratas para os mais econômicos.&lt;/p&gt;  &lt;p&gt;Mais duas horas de viagem do Tietê para Limeira e lá estava eu, no Senac, horas antes de minha palestra, o que ainda me deu tempo de trabalhar um pouco.&lt;/p&gt;  &lt;p&gt;Assim como em outras palestras que tenho feito, tenho procurado destacar bastante o lado de gerenciamento coorporativo com Mirror, Resource Governor e Policies, porém indo muito além de simples bla, bla, bla, mas com demonstrações reais. O efeito agrada muito o público que, pelo menos aparentemente, passa a ter uma nova visão do que é um servidor de banco de dados e o que este deve fornecer.&lt;/p&gt;  &lt;p&gt;Na volta para o Rio, peguei um leito de Uberlândia para o Rio que passa por Limeira, o que me deu uma nova visão geográfica da região, coisa que não tinha. Peguei no meio do caminho, no posto Castelo, só para descobrir o mal hábito deles atrasarem MUITO.&lt;/p&gt;  &lt;p&gt;Passado o atraso, tive uma agradável surpresa : O leito da Expresso União é MELHOR que o leito da 1001 !! Incrível !&lt;/p&gt;  &lt;p&gt;Fotos :&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Windows 7 com Laércio Simões : &lt;a href="http://www.facebook.com/album.php?aid=152898&amp;amp;id=763439605&amp;amp;l=690ccea0e1"&gt;http://www.facebook.com/album.php?aid=152898&amp;amp;id=763439605&amp;amp;l=690ccea0e1&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;SQL Server 2008 comigo : &lt;a href="http://www.facebook.com/album.php?aid=153469&amp;amp;id=763439605&amp;amp;l=417f6e19f1"&gt;http://www.facebook.com/album.php?aid=153469&amp;amp;id=763439605&amp;amp;l=417f6e19f1&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-170143630979866018?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/NU0yXtnzS2Q/circuito-de-ti-do-senac.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/09/circuito-de-ti-do-senac.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-4987679577439832645</guid><pubDate>Mon, 28 Sep 2009 17:34:00 +0000</pubDate><atom:updated>2009-09-28T14:34:38.937-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Hardware</category><title>Modem USB da Vivo e da Claro</title><description>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_iMnxV1XbO4I/SsDzpVGcArI/AAAAAAAACjY/wqq4TE5kjt0/s1600-h/ModemVivo%5B2%5D.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="ModemVivo" border="0" alt="ModemVivo" align="right" src="http://lh5.ggpht.com/_iMnxV1XbO4I/SsDzrBy4hBI/AAAAAAAACjc/1ds9g8bzBOE/ModemVivo_thumb.jpg?imgmax=800" width="112" height="151" /&gt;&lt;/a&gt; Meu querido modem Aiko bateu as botas, deu seus últimos suspiros neste fim de semana (se vou ressucita-lo ou não, é outra história ;-)&lt;/p&gt;  &lt;p&gt;Comprei um novo modem da Vivo, que está fornecendo o Huawei E156B, que tem forma de pen drive. É mais ou menos o mesmo modelo fornecido pela Claro. Quem disse que esse troço funciona no &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=5654354285488990160" target="_blank"&gt;windows 7&lt;/a&gt; ?&lt;/p&gt;  &lt;p&gt;O Windows 7 reconhece o modem, aparece no “devices e printers”, mas o software discador não consegue fazer o reconhecimento do modem.&lt;/p&gt;  &lt;p&gt;A Vivo, mantendo sua fama de atendimento exemplar pelo qual já é conhecida, depois de me deixar bastante tempo no telefone simplesmente disse que não dá suporte ao modem no Windows 7.&lt;/p&gt;  &lt;p&gt;É nessas horas que nos sentimos desamparados, especialmente quando vemos que o site da Huawei, fabricante de modens de alta velocidade, é mais lento que uma tartaruga manca.&lt;/p&gt;  &lt;p&gt;Finalmente, porém, consegui encontrar no site da Huawei as informações que precisava : Como atualizar o firmware do modem. Pois é, Vivo e Claro distribuem modens com firmware desatualizado, o que acontece quando um leigo pega isso ?&lt;/p&gt;  &lt;p&gt;seguem os links :&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a title="http://www.huawei.com/Search/result.do?searchString=e156b&amp;amp;eliminateRepeatResult=no&amp;amp;searchIn=productline&amp;amp;lc=pt_LA&amp;amp;s_sel=pt_LA" href="http://www.huawei.com/Search/result.do?searchString=e156b&amp;amp;eliminateRepeatResult=no&amp;amp;searchIn=productline&amp;amp;lc=pt_LA&amp;amp;s_sel=pt_LA"&gt;http://www.huawei.com/Search/result.do?searchString=e156b&amp;amp;eliminateRepeatResult=no&amp;amp;searchIn=productline&amp;amp;lc=pt_LA&amp;amp;s_sel=pt_LA&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a title="http://www.huawei.com/pt/catalog.do?id=1681" href="http://www.huawei.com/pt/catalog.do?id=1681"&gt;http://www.huawei.com/pt/catalog.do?id=1681&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Depois da atualização o software de discagem reconheceu o modem e tudo voltou ao normal, ou quase : Minhas experiências até agora mostram uma irritante lentidão no acesso, o que se continuar vai fazer com que eu faça umas macumbas para ressuscitar o Aiko.&lt;/p&gt;  &lt;p&gt;Aproveitando a oportunidade, fiz uma pesquisa no que as operadoras tinham a oferecer nesta área, vejam o que descobri :&lt;/p&gt; &lt;span id="fullpost"&gt;   &lt;p&gt;&lt;strong&gt;Claro&lt;/strong&gt;&lt;/p&gt;    &lt;blockquote&gt;     &lt;p&gt;Cobra roaming. Pior opção para alguém que viaja como eu.&lt;/p&gt;   &lt;/blockquote&gt;    &lt;p&gt;&lt;strong&gt;Oi&lt;/strong&gt;&lt;/p&gt;    &lt;blockquote&gt;     &lt;p&gt;O “plano ilimitado” tem limite de 10GB por mês. Para mim, que já uso este acesso como meu meio principal de acesso a web, é algo inviável.&lt;/p&gt;      &lt;p&gt;Além disso as promoções só valem por telefone, quando se tem a paciência de esperar 10 dias para receber o modem em casa. Na loja, nada feito : efeitos da terceirização.&lt;/p&gt;      &lt;p&gt;Não cobra roaming&lt;/p&gt;   &lt;/blockquote&gt;    &lt;p&gt;&lt;strong&gt;Vivo&lt;/strong&gt;&lt;/p&gt;    &lt;blockquote&gt;     &lt;p&gt;Não cobra roaming, acabei ficando com ela mesmo. Mas estes Huawei distribuidos pela Vivo e Claro (corre um boato que foram descontinuados lá fora) podem causar problema&lt;/p&gt;   &lt;/blockquote&gt;    &lt;p&gt;&lt;strong&gt;Curiosidade :&lt;/strong&gt; Achei estranho o tabelamento do valor da assinatura, identico nas 3 operadoras (ou pelo menos na Vivo e Oi, pelo que me lembro).&lt;/p&gt; &lt;/span&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-4987679577439832645?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/pqwZn4JqHpQ/modem-usb-da-vivo-e-da-claro.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/09/modem-usb-da-vivo-e-da-claro.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-6164407556348797167</guid><pubDate>Fri, 25 Sep 2009 04:52:00 +0000</pubDate><atom:updated>2009-09-25T01:52:48.443-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Eventos</category><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">SQLServer</category><title>Entrevista para a Rádio TOP FM</title><description>&lt;p&gt;Nesta 6a e sábado estarei em Porto União (SC), na Universidade do Contestado (UNC) palestrando na 6a feira sobre &lt;a title=".NET" href="http://www.bufaloinfo.com.br/celulasacademicas.asp" target="_blank"&gt;.NET&lt;/a&gt; e no sábado sobre &lt;a title="SQL Server 2008" href="http://www.microsoft.com/sql/2008/default.mspx" target="_blank"&gt;SQL Server&lt;/a&gt; .&lt;/p&gt;  &lt;p&gt;Para ajudar na divulgação do evento fui entrevistado por telefone pela rádio TOP FM, da cidade de União da Vitória, que fica bem próxima de Porto União e também tem um campus da Universidade do Contestado.&lt;/p&gt;  &lt;p&gt;A entrevista ficou bem interessante, e vai ser passada algumas vezes na rádio até sábado.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.bufaloinfo.com.br/entrevista_dennes.mp3"&gt;Ouça a entrevista&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-6164407556348797167?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/_pXwAFkZ5yc/entrevista-para-radio-top-fm.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/09/entrevista-para-radio-top-fm.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-6583161020386469232</guid><pubDate>Tue, 15 Sep 2009 04:15:00 +0000</pubDate><atom:updated>2009-09-16T03:04:23.686-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Eventos</category><category domain="http://www.blogger.com/atom/ns#">SQLServer</category><title>Evento de BI em São Paulo (Fatec-Itaquaquecetuba)</title><description>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_iMnxV1XbO4I/Sq8U71QceAI/AAAAAAAACi4/Y8MoqkYoGHw/s1600-h/SQL%5B2%5D.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="SQL" border="0" alt="SQL" align="right" src="http://lh5.ggpht.com/_iMnxV1XbO4I/Sq8U88gaJgI/AAAAAAAACi8/m1LGj5eymDE/SQL_thumb.jpg?imgmax=800" width="116" height="151" /&gt;&lt;/a&gt; Vanessa Porto, ex-carioca que se tornou DBA do Habibs em São Paulo, esteve em meu &lt;a href="http://www.bufaloinfo.com.br/ExibeNoticias.aspx?entryid=7886706183484153271"&gt;evento de SQL Server na São Judas&lt;/a&gt;. Ela já conhecia minhas palestras anteriormente, do Rio de Janeiro, então resolveu aparecer por lá.&lt;/p&gt;  &lt;p&gt;Vanessa é especialista em BI, gostou muito do evento e tornou-se uma participante ativa em nosso PASS Chapter, &lt;a title="devSQL" href="http://www.devsql.com.br" target="_blank"&gt;devSQL&lt;/a&gt; (&lt;a href="mailto:devSQL-subscribe@yahoogrupos.com.br"&gt;devSQL-subscribe@yahoogrupos.com.br&lt;/a&gt; ). Criou &lt;a href="http://databaseinside.blogspot.com/"&gt;um blog no qual estará falando sobre SQL Server&lt;/a&gt; e contando sobre suas participações nos eventos da comunidade.&lt;/p&gt;  &lt;p&gt;Apresentei Vanessa ao Luiz, sim, o mesmo Luiz responsável por realizar o evento &lt;a href="http://cidadaocarioca.blogspot.com/2008/01/heroes-community-launch.html" target="_blank"&gt;HCL&lt;/a&gt; na única Fatec que particiou do evento em 15/03/2008, em Itaquaquecetuba.&lt;/p&gt;  &lt;p&gt;Resultado : Vanessa estará realizando a palestra “Introdução à Teoria de Business Intelligence” na Fatec de Itaquaquecetuba no dia 02/10 as 20hs.&lt;/p&gt;  &lt;p&gt;&lt;strike&gt;Inscrevam-se e participem !&lt;/strike&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;UPDATE :&lt;/em&gt;&lt;/strong&gt; A Fatec Itaquaquecetuba irá disponibilizar inscrição em seu novo site, que será disponibilizado a partir do dia 21. Quando estiver disponível, publico o link aqui.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-6583161020386469232?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/Cehoy9J2Kwo/evento-de-bi-em-sao-paulo-fatec.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/09/evento-de-bi-em-sao-paulo-fatec.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-6672545457628605222</guid><pubDate>Tue, 15 Sep 2009 03:02:00 +0000</pubDate><atom:updated>2009-09-15T00:02:03.028-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Eventos</category><category domain="http://www.blogger.com/atom/ns#">.NET</category><title>Eventos em Ituiutaba : Fotos, ppts e demos</title><description>&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_iMnxV1XbO4I/Sq8DpLtBFlI/AAAAAAAACiw/aaWnL_5-FbM/s1600-h/10309-aspnet_logo%5B2%5D.gif" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="10309-aspnet_logo" border="0" alt="10309-aspnet_logo" align="right" src="http://lh5.ggpht.com/_iMnxV1XbO4I/Sq8DqY60gUI/AAAAAAAACi0/-ExSg3v82ys/10309-aspnet_logo_thumb.gif?imgmax=800" width="192" height="59" /&gt;&lt;/a&gt; Passei o final de semana em Ituiutaba, palestrando 6a a noite e sábado na FEIT – Fundação Educacional de Ituiutaba. Para quem não sabe, Ituiutaba fica a quase 2 horas de Uberlândia, perto da divisa de Minas com Goiais.&lt;/p&gt;  &lt;p&gt;Na 6a a noite palestrei sobre introdução ao &lt;a title="Framework .NET" href="http://msdn2.microsoft.com/en-us/netframework/default.aspx" target="_blank"&gt;framework .NET&lt;/a&gt;, o pessoal gostou muito e 6a a noite mesmo encontrei no &lt;a href="http://www.twitter.com" target="_blank"&gt;twitter&lt;/a&gt; pessoas que participaram da palestra.&lt;/p&gt;  &lt;p&gt;Sábado a palestra foi sobre desenvolvimento em camadas. Para torna-la mais simples, na parte da manhã mostrei o desenvolvimento em camadas com dataSets, certamente surpreendendo muitos com a capacidade dos datasets. Já na parte da tarde mostrei o mesmo com o &lt;a href="http://msdn.microsoft.com/en-us/library/bb399572.aspx" target="_blank"&gt;Entity Framework&lt;/a&gt;, o que fez a palestra ficar mais complexa.&lt;/p&gt;  &lt;p&gt;A cidade tem um jeitão de cidade grande e um clima estranho : muito calor durante o dia e muito frio durante a noite. Muita música ao vivo com duplas sertanejas uma após a outra e um espagueti ao alho e olho delicioso que nunca vi no Rio, feito com mussarela. A pizza de strogonoff também foi novidade para mim, apesar de que acho que existe em alguns lugares do Rio também.&lt;/p&gt;  &lt;p&gt;Seguem as fotos :&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Viagem Rio-&amp;gt;Ituiutaba : &lt;a href="http://www.facebook.com/album.php?aid=149236&amp;amp;id=763439605&amp;amp;l=fc74e8fbf1"&gt;http://www.facebook.com/album.php?aid=149236&amp;amp;id=763439605&amp;amp;l=fc74e8fbf1&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;Palestra de 6a a noite : &lt;a href="http://www.facebook.com/album.php?aid=149246&amp;amp;id=763439605&amp;amp;l=872992d876"&gt;http://www.facebook.com/album.php?aid=149246&amp;amp;id=763439605&amp;amp;l=872992d876&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;Palestea de Sábado : &lt;a href="http://www.facebook.com/album.php?aid=149249&amp;amp;id=763439605&amp;amp;l=37e42102e7"&gt;http://www.facebook.com/album.php?aid=149249&amp;amp;id=763439605&amp;amp;l=37e42102e7&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;Viagem Ituiutaba Rio : &lt;a href="http://www.facebook.com/album.php?aid=150252&amp;amp;id=763439605&amp;amp;l=d8ce9ba181"&gt;http://www.facebook.com/album.php?aid=150252&amp;amp;id=763439605&amp;amp;l=d8ce9ba181&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;Os ppts e demos : &lt;a title="EventoITUIUTABA092009" href="https://ug.culminis.com/sites/devASPNet/Apresentaes%20Tcnicas/EventoITUIUTABA092009.zip"&gt;EventoITUIUTABA092009&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-6672545457628605222?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/tOphqKGiAPo/eventos-em-ituiutaba-fotos-ppts-e-demos.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/09/eventos-em-ituiutaba-fotos-ppts-e-demos.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-8942834760070836944</guid><pubDate>Mon, 14 Sep 2009 16:34:00 +0000</pubDate><atom:updated>2009-09-14T13:34:57.693-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Eventos</category><category domain="http://www.blogger.com/atom/ns#">.NET</category><title>Evento na Fatec-SP, fotos e ppts</title><description>&lt;p&gt;Na última 5a feira estive na Fatec SP para realizar uma apresentação sobre células acadêmicas e .NET.&lt;/p&gt;  &lt;p&gt;Caprichei na parte referente a células e o mercado de trabalho, espero ter conseguido resultados muito bons e aparentemente consegui : Me surpreendi com muitos alunos da FATEC elogiando a apresentação pelo &lt;a href="http://www.twitter.com" target="_blank"&gt;twitter&lt;/a&gt; e comentando sobre a abertura de suas células.&lt;/p&gt;  &lt;p&gt;Publiquei as fotos do evento em &lt;a href="http://www.facebook.com/album.php?aid=148474&amp;amp;id=763439605&amp;amp;l=4dbe0526b8"&gt;http://www.facebook.com/album.php?aid=148474&amp;amp;id=763439605&amp;amp;l=4dbe0526b8&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Os ppts que utilizei no evento encontram-se em &lt;a title="EventoFatecSP1009" href="http://ug.culminis.com/sites/devASPNet/Apresentaes%20Tcnicas/EventoFatecSP1009.zip"&gt;EventoFatecSP1009&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-8942834760070836944?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/XXj6dUW6LKc/evento-na-fatec-sp-fotos-e-ppts.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/09/evento-na-fatec-sp-fotos-e-ppts.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-34573201.post-7886706183484153271</guid><pubDate>Tue, 08 Sep 2009 21:16:00 +0000</pubDate><atom:updated>2009-09-08T18:16:54.417-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SQLServer</category><title>Evento de SQL Server na São Judas : Fotos, PPTs e demos</title><description>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_iMnxV1XbO4I/SqbJvxwlDJI/AAAAAAAACio/k6oX0OHtOXs/s1600-h/SQL%5B2%5D.jpg" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="SQL" border="0" alt="SQL" align="right" src="http://lh4.ggpht.com/_iMnxV1XbO4I/SqbJxFgVmKI/AAAAAAAACis/Y8_VFMbQhrQ/SQL_thumb.jpg?imgmax=800" width="116" height="151" /&gt;&lt;/a&gt; Neste último sábado, dia 05/09, realizei o evento na Universidade São Judas Tadeu sobre &lt;a title="SQL Server 2008" href="http://www.microsoft.com/sql/2008/default.mspx" target="_blank"&gt;&lt;a title="SQL Server 2008" href="http://www.microsoft.com/sqlserver/2008/en/us/default.aspx" target="_blank"&gt;SQL Server 2008&lt;/a&gt;.&lt;/a&gt; Feriado prolongado, o público que teríamos era uma grande incerteza. Considerando tudo, foi um ótimo público não só pelo número de pessoas mas pela qualidade do público, interesse e perguntas.&lt;/p&gt;  &lt;p&gt;As fotos do evento já estão disponíveis em &lt;a href="http://www.facebook.com/album.php?aid=146401&amp;amp;id=763439605&amp;amp;l=60c30b64c8"&gt;http://www.facebook.com/album.php?aid=146401&amp;amp;id=763439605&amp;amp;l=60c30b64c8&lt;/a&gt;. Uma pena que o Prof. Gabriel conseguiu escapar das fotografias.&lt;/p&gt;  &lt;p&gt;Publiquei também as demonstrações em &lt;a title="EventoSaoJudas05092009" href="https://ug.culminis.com/sites/devASPNet/Apresentaes%20Tcnicas/EventoSaoJudas05092009.zip"&gt;EventoSaoJudas05092009&lt;/a&gt;, sem preparo especial para publicar, foram os arquivos que usei para a palestra.&lt;/p&gt;  &lt;p&gt;Gostei muito de ver a grande presença do pessoal das ETECs, tanto professores como alunos. Isso gerou mais um evento em SP : Nesta 5a feira estarei em SP as 8hs da manhã na FATEC São Paulo palestrando sobre &lt;a title=".NET" href="http://www.bufaloinfo.com.br/celulasacademicas.asp" target="_blank"&gt;.NET&lt;/a&gt;. Vocês podem se inscrever em &lt;a title="http://www.devaspnet.com.br/tfest/default.aspx?pg=evtDetalhes&amp;amp;idEvento=914" href="http://www.devaspnet.com.br/tfest/default.aspx?pg=evtDetalhes&amp;amp;idEvento=914"&gt;http://www.devaspnet.com.br/tfest/default.aspx?pg=evtDetalhes&amp;amp;idEvento=914&lt;/a&gt; , a FATEC São Paulo fica próxima ao metrô Tiradentes, a palestra será na sala 51A.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34573201-7886706183484153271?l=cidadaocarioca.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/CidadaoCarioca/~3/lX2r_jzyUw4/evento-de-sql-server-na-sao-judas-fotos.html</link><author>noreply@blogger.com (Dennes)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://cidadaocarioca.blogspot.com/2009/09/evento-de-sql-server-na-sao-judas-fotos.html</feedburner:origLink></item></channel></rss>
