<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Paulo Morgado</title><link>http://weblogs.pontonetpt.com/pjmorgado/</link><description>Tudo sobre .NET</description><dc:language>pt-PT</dc:language><generator>RSS Generated by Dottext 0.94</generator><item><dc:creator>Paulo Morgado</dc:creator><title>PDC2008: Ser&amp;#225; O Fim Dos Windows Forms?</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28302.aspx</link><pubDate>Thu, 09 Oct 2008 01:39:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28302.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28302.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28302.aspx#feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28302.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28302</trackback:ping><description>&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;O &lt;a title="Microsoft PDC" href="http://microsoftpdc.com/" target="_blank"&gt;PDC&lt;/a&gt; deste ano é todo acerca da &lt;strong&gt;cloud&lt;/strong&gt; (núvem – ou nebulosa, como eu lhe chamo) e a &lt;a title=".NET Framework Developer Center" href="http://msdn.microsoft.com/netframework/" target="_blank"&gt;.NET Framework&lt;/a&gt; 4.0.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;Ninguém da &lt;a title="Microsoft Corporation" href="http://www.microsoft.com/" target="_blank"&gt;Microsoft&lt;/a&gt; me disse que os &lt;a title="Windows Forms" href="http://msdn.microsoft.com/netframework/aa497342.aspx" target="_blank"&gt;Windows Forms&lt;/a&gt; tinham os dias contados (antes pelo contrário) mas, olhando para  lista de &lt;a title="PDC 2008 / Agenda /Sessions" href="https://sessions.microsoftpdc.com/public/sessions.aspx" target="_blank"&gt;sessões&lt;/a&gt; do PDC deste ano, só vejo &lt;a title="Windows Presentation Foundation" href="http://msdn.microsoft.com/library/ms754130.aspx" target="_blank"&gt;WPF&lt;/a&gt;.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;Portanto, a questão mantem-se: &lt;strong&gt;Será o fim dos Windows Forms?&lt;/strong&gt;&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;
&lt;p&gt;[Cross-Posted de &lt;a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/"&gt;http://www.arquitecturadesoftware.org/blogs/paulomorgado/&lt;/a&gt;]&lt;/p&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><a href="http://PauloMorgado.NET/"></a>  <p>O <a title="Microsoft PDC" href="http://microsoftpdc.com/" target="_blank">PDC</a> deste ano é todo acerca da <strong>cloud</strong> (núvem – ou nebulosa, como eu lhe chamo) e a <a title=".NET Framework Developer Center" href="http://msdn.microsoft.com/netframework/" target="_blank">.NET Framework</a> 4.0.</p> <a href="http://PauloMorgado.NET/"></a>  <p>Ninguém da <a title="Microsoft Corporation" href="http://www.microsoft.com/" target="_blank">Microsoft</a> me disse que os <a title="Windows Forms" href="http://msdn.microsoft.com/netframework/aa497342.aspx" target="_blank">Windows Forms</a> tinham os dias contados (antes pelo contrário) mas, olhando para  lista de <a title="PDC 2008 / Agenda /Sessions" href="https://sessions.microsoftpdc.com/public/sessions.aspx" target="_blank">sessões</a> do PDC deste ano, só vejo <a title="Windows Presentation Foundation" href="http://msdn.microsoft.com/library/ms754130.aspx" target="_blank">WPF</a>.</p> <a href="http://PauloMorgado.NET/"></a>  <p>Portanto, a questão mantem-se: <strong>Será o fim dos Windows Forms?</strong></p> <a href="http://PauloMorgado.NET/"></a>
<p>[Cross-Posted de <a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/">http://www.arquitecturadesoftware.org/blogs/paulomorgado/</a>]</p></body></item><item><dc:creator>Paulo Morgado</dc:creator><title>Lan&amp;#231;amento Do Typemock Isolator 5.1</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28289.aspx</link><pubDate>Mon, 06 Oct 2008 23:49:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28289.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28289.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28289.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28289.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28289</trackback:ping><description>&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;Esta versão adiciona o suporte para métodos estáticos e metódos não públicos à API AAA. Vejam as &lt;a title="Typemock Isolator 5.1 Released!" href="http://blog.typemock.com/2008/09/typemock-isolator-51-released.html" target="_blank"&gt;notas de lançamento&lt;/a&gt;.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;Não me agrada muito a aproximação reflectiva ao teste de membros privados.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;Com as novas adicões à API AAA, testar esta classe:&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;MyClass
&lt;/span&gt;{
    &lt;span style="color: blue"&gt;public string &lt;/span&gt;Public()
    {
        &lt;span style="color: blue"&gt;return this&lt;/span&gt;.Private();
    }

    &lt;span style="color: blue"&gt;private string &lt;/span&gt;Private()
    {
        &lt;span style="color: blue"&gt;throw new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;NotImplementedException&lt;/span&gt;();
    }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p&gt;pode ser feito assim:&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;[&lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;]
[&lt;span style="color: #2b91af"&gt;Isolated&lt;/span&gt;]
&lt;span style="color: blue"&gt;public void &lt;/span&gt;PrivateTest()
{
    &lt;span style="color: #2b91af"&gt;MyClass &lt;/span&gt;fake = &lt;span style="color: #2b91af"&gt;Isolate&lt;/span&gt;.Fake.Instance&amp;lt;&lt;span style="color: #2b91af"&gt;MyClass&lt;/span&gt;&amp;gt;();

    &lt;span style="color: #2b91af"&gt;Isolate&lt;/span&gt;.WhenCalled(() =&amp;gt; fake.Public()).CallOriginal();

    &lt;span style="color: #2b91af"&gt;Isolate&lt;/span&gt;.NonPublic.WhenCalled(fake, &lt;span style="color: #a31515"&gt;"Private"&lt;/span&gt;).WillReturn(&lt;span style="color: #a31515"&gt;"FAKE"&lt;/span&gt;);

    &lt;span style="color: blue"&gt;string &lt;/span&gt;fakePublic = fake.Public();

    &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="color: #a31515"&gt;"FAKE"&lt;/span&gt;, fakePublic);

    &lt;span style="color: #2b91af"&gt;Isolate&lt;/span&gt;.Verify.WasCalledWithExactArguments(() =&amp;gt; fake.Public());

    &lt;span style="color: #2b91af"&gt;Isolate&lt;/span&gt;.Verify.NonPublic.WasCalled(fake, &lt;span style="color: #a31515"&gt;"Private"&lt;/span&gt;);
}&lt;/pre&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p&gt;Agradava-me mais que fosse assim:&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;[&lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;]
[&lt;span style="color: #2b91af"&gt;Isolated&lt;/span&gt;]
&lt;span style="color: blue"&gt;public void &lt;/span&gt;PrivateTest()
{
    &lt;span style="color: #2b91af"&gt;MyClass &lt;/span&gt;fake = &lt;span style="color: #2b91af"&gt;Isolate&lt;/span&gt;.Fake.Instance&amp;lt;&lt;span style="color: #2b91af"&gt;MyClass&lt;/span&gt;&amp;gt;();

    &lt;span style="color: #2b91af"&gt;MyClass_Accessor &lt;/span&gt;fakeAccessor = &lt;span style="color: #2b91af"&gt;MyClass_Accessor&lt;/span&gt;.AttachShadow(fake);

    &lt;span style="color: #2b91af"&gt;Isolate&lt;/span&gt;.WhenCalled(() =&amp;gt; fakeAccessor.Private()).WillReturn(&lt;span style="color: #a31515"&gt;"FAKE"&lt;/span&gt;);

    &lt;span style="color: #2b91af"&gt;Isolate&lt;/span&gt;.WhenCalled(() =&amp;gt; fake.Public()).CallOriginal();

    &lt;span style="color: blue"&gt;string &lt;/span&gt;fakePublic = fake.Public();

    &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="color: #a31515"&gt;"FAKE"&lt;/span&gt;, fakePublic);

    &lt;span style="color: #2b91af"&gt;Isolate&lt;/span&gt;.Verify.WasCalledWithExactArguments(() =&amp;gt; fake.Public());

    &lt;span style="color: #2b91af"&gt;Isolate&lt;/span&gt;.Verify.WasCalledWithExactArguments(() =&amp;gt; fakeAccessor.Private());
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p&gt;Parece a mesma coisa mas não há nomes de métodos no código de teste.&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p&gt;Eles conseguiram fazê-lo para os Natural Mocks. Certamente que o conseguirão fazer para AAA.&lt;/p&gt;
&lt;p&gt;[Cross-Posted de &lt;a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/"&gt;http://www.arquitecturadesoftware.org/blogs/paulomorgado/&lt;/a&gt;]&lt;/p&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><a href="http://PauloMorgado.NET/"></a>  <p>Esta versão adiciona o suporte para métodos estáticos e metódos não públicos à API AAA. Vejam as <a title="Typemock Isolator 5.1 Released!" href="http://blog.typemock.com/2008/09/typemock-isolator-51-released.html" target="_blank">notas de lançamento</a>.</p> <a href="http://PauloMorgado.NET/"></a>  <p>Não me agrada muito a aproximação reflectiva ao teste de membros privados.</p> <a href="http://PauloMorgado.NET/"></a>  <p>Com as novas adicões à API AAA, testar esta classe:</p> <a href="http://PauloMorgado.NET/"></a>  <pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">MyClass
</span>{
    <span style="color: blue">public string </span>Public()
    {
        <span style="color: blue">return this</span>.Private();
    }

    <span style="color: blue">private string </span>Private()
    {
        <span style="color: blue">throw new </span><span style="color: #2b91af">NotImplementedException</span>();
    }
}</pre>
<a href="http://11011.net/software/vspaste"></a><a href="http://PauloMorgado.NET/"></a>

<p>pode ser feito assim:</p>
<a href="http://PauloMorgado.NET/"></a>

<pre class="code">[<span style="color: #2b91af">TestMethod</span>]
[<span style="color: #2b91af">Isolated</span>]
<span style="color: blue">public void </span>PrivateTest()
{
    <span style="color: #2b91af">MyClass </span>fake = <span style="color: #2b91af">Isolate</span>.Fake.Instance&lt;<span style="color: #2b91af">MyClass</span>&gt;();

    <span style="color: #2b91af">Isolate</span>.WhenCalled(() =&gt; fake.Public()).CallOriginal();

    <span style="color: #2b91af">Isolate</span>.NonPublic.WhenCalled(fake, <span style="color: #a31515">"Private"</span>).WillReturn(<span style="color: #a31515">"FAKE"</span>);

    <span style="color: blue">string </span>fakePublic = fake.Public();

    <span style="color: #2b91af">Assert</span>.AreEqual(<span style="color: #a31515">"FAKE"</span>, fakePublic);

    <span style="color: #2b91af">Isolate</span>.Verify.WasCalledWithExactArguments(() =&gt; fake.Public());

    <span style="color: #2b91af">Isolate</span>.Verify.NonPublic.WasCalled(fake, <span style="color: #a31515">"Private"</span>);
}</pre>
<a href="http://PauloMorgado.NET/"></a>

<p>Agradava-me mais que fosse assim:</p>
<a href="http://PauloMorgado.NET/"></a>

<pre class="code">[<span style="color: #2b91af">TestMethod</span>]
[<span style="color: #2b91af">Isolated</span>]
<span style="color: blue">public void </span>PrivateTest()
{
    <span style="color: #2b91af">MyClass </span>fake = <span style="color: #2b91af">Isolate</span>.Fake.Instance&lt;<span style="color: #2b91af">MyClass</span>&gt;();

    <span style="color: #2b91af">MyClass_Accessor </span>fakeAccessor = <span style="color: #2b91af">MyClass_Accessor</span>.AttachShadow(fake);

    <span style="color: #2b91af">Isolate</span>.WhenCalled(() =&gt; fakeAccessor.Private()).WillReturn(<span style="color: #a31515">"FAKE"</span>);

    <span style="color: #2b91af">Isolate</span>.WhenCalled(() =&gt; fake.Public()).CallOriginal();

    <span style="color: blue">string </span>fakePublic = fake.Public();

    <span style="color: #2b91af">Assert</span>.AreEqual(<span style="color: #a31515">"FAKE"</span>, fakePublic);

    <span style="color: #2b91af">Isolate</span>.Verify.WasCalledWithExactArguments(() =&gt; fake.Public());

    <span style="color: #2b91af">Isolate</span>.Verify.WasCalledWithExactArguments(() =&gt; fakeAccessor.Private());
}</pre>
<a href="http://11011.net/software/vspaste"></a><a href="http://PauloMorgado.NET/"></a>

<p>Parece a mesma coisa mas não há nomes de métodos no código de teste.</p>
<a href="http://PauloMorgado.NET/"></a>

<p>Eles conseguiram fazê-lo para os Natural Mocks. Certamente que o conseguirão fazer para AAA.</p>
<p>[Cross-Posted de <a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/">http://www.arquitecturadesoftware.org/blogs/paulomorgado/</a>]</p></body></item><item><dc:creator>Paulo Morgado</dc:creator><title>Forjando Par&amp;#226;metros De Sa&amp;#237;da Com Typemock Isolator</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28288.aspx</link><pubDate>Mon, 06 Oct 2008 22:05:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28288.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28288.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28288.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28288.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28288</trackback:ping><description>&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;Há algum tempo &lt;a title="Unit Testing and Mock Frameworks" href="http://msmvps.com/blogs/paulomorgado/archive/2007/02/17/unit-testing-and-mock-frameworks.aspx#1648003" target="_blank"&gt;perguntaram-me&lt;/a&gt; se seria possível forjar parâmetros de saída usando o &lt;a title="Typemock - Simplify Unit Testing!" href="http://www.typemock.com/" target="_blank"&gt;&lt;/a&gt;&lt;a title="Typemock Isolator - Serious Development" href="http://www.typemock.com/Product.html" target="_blank"&gt;Typemock Isolator&lt;/a&gt;.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;Na verdade é muito fácil de o fazer usand qualquer uma das APIs disponíveis.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;Dada esta classe:&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;pre class="code"&gt;&lt;span style="color: #0000ff"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;MyClass
&lt;/span&gt;{
    &lt;span style="color: #0000ff"&gt;public bool &lt;/span&gt;MyMethod(&lt;span style="color: #0000ff"&gt;string &lt;/span&gt;input, &lt;span style="color: #0000ff"&gt;out int &lt;/span&gt;output1, &lt;span style="color: #0000ff"&gt;out double &lt;/span&gt;output2)
    {
        &lt;span style="color: #0000ff"&gt;throw new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;NotImplementedException&lt;/span&gt;();
    }
}&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Usando a nova API AAA, é tão limpo omo:&lt;/p&gt;

&lt;pre class="code"&gt;[&lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;]
[&lt;span style="color: #2b91af"&gt;Isolated&lt;/span&gt;]
&lt;span style="color: blue"&gt;public void &lt;/span&gt;TestMethodIsolated()
{
    &lt;span style="color: #2b91af"&gt;MyClass &lt;/span&gt;target = &lt;span style="color: #2b91af"&gt;Isolate&lt;/span&gt;.Fake.Instance&amp;lt;&lt;span style="color: #2b91af"&gt;MyClass&lt;/span&gt;&amp;gt;();

    &lt;span style="color: blue"&gt;string &lt;/span&gt;input = &lt;span style="color: #a31515"&gt;"test value"&lt;/span&gt;;
    &lt;span style="color: blue"&gt;int &lt;/span&gt;expectedOutput1 = 1;
    &lt;span style="color: blue"&gt;double &lt;/span&gt;expectedOutput2 = 2;

    &lt;span style="color: #2b91af"&gt;Isolate&lt;/span&gt;.WhenCalled(() =&amp;gt; target.MyMethod(input, &lt;span style="color: blue"&gt;out &lt;/span&gt;expectedOutput1, &lt;span style="color: blue"&gt;out &lt;/span&gt;expectedOutput2)).WillReturn(&lt;span style="color: blue"&gt;true&lt;/span&gt;);

    &lt;span style="color: blue"&gt;int &lt;/span&gt;output1;
    &lt;span style="color: blue"&gt;double &lt;/span&gt;output2;
    &lt;span style="color: blue"&gt;bool &lt;/span&gt;result = target.MyMethod(input, &lt;span style="color: blue"&gt;out &lt;/span&gt;output1, &lt;span style="color: blue"&gt;out &lt;/span&gt;output2);

    &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.IsTrue(result);
    &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&amp;gt;(expectedOutput1, output1);
    &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual&amp;lt;&lt;span style="color: blue"&gt;double&lt;/span&gt;&amp;gt;(expectedOutput2, output2);
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p&gt;Usando Natural Mocks, é tão fácil como:&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;[&lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;]
[&lt;span style="color: #2b91af"&gt;VerifyMocks&lt;/span&gt;]
&lt;span style="color: #0000ff"&gt;public void &lt;/span&gt;TestMethodNatural()
{
    &lt;span style="color: #2b91af"&gt;MyClass &lt;/span&gt;target = &lt;span style="color: #2b91af"&gt;RecorderManager&lt;/span&gt;.CreateMockedObject&amp;lt;&lt;span style="color: #2b91af"&gt;MyClass&lt;/span&gt;&amp;gt;();

    &lt;span style="color: #0000ff"&gt;string &lt;/span&gt;input = &lt;span style="color: #a31515"&gt;"test value"&lt;/span&gt;;
    &lt;span style="color: #0000ff"&gt;int &lt;/span&gt;expectedOutput1 = 1;
    &lt;span style="color: #0000ff"&gt;double &lt;/span&gt;expectedOutput2 = 2;

    &lt;span style="color: #0000ff"&gt;using &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;RecordExpectations &lt;/span&gt;recorder = &lt;span style="color: #2b91af"&gt;RecorderManager&lt;/span&gt;.StartRecording())
    {
        recorder.ExpectAndReturn(target.MyMethod(input, &lt;span style="color: #0000ff"&gt;out &lt;/span&gt;expectedOutput1, &lt;span style="color: #0000ff"&gt;out &lt;/span&gt;expectedOutput2), &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;);
    }

    &lt;span style="color: #0000ff"&gt;int &lt;/span&gt;output1;
    &lt;span style="color: #0000ff"&gt;double &lt;/span&gt;output2;
    &lt;span style="color: #0000ff"&gt;bool &lt;/span&gt;result = target.MyMethod(input, &lt;span style="color: #0000ff"&gt;out &lt;/span&gt;output1, &lt;span style="color: #0000ff"&gt;out &lt;/span&gt;output2);

    &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.IsTrue(result);
    &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual&amp;lt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;gt;(expectedOutput1, output1);
    &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual&amp;lt;&lt;span style="color: #0000ff"&gt;double&lt;/span&gt;&amp;gt;(expectedOutput2, output2);
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p&gt;Também é possível usando Reflective Mocks:&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;[&lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;]
[&lt;span style="color: #2b91af"&gt;VerifyMocks&lt;/span&gt;]
&lt;span style="color: #0000ff"&gt;public void &lt;/span&gt;TestMethodReflective()
{
    &lt;span style="color: #2b91af"&gt;MockObject&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;MyClass&lt;/span&gt;&amp;gt; targetMock = &lt;span style="color: #2b91af"&gt;MockManager&lt;/span&gt;.MockObject&amp;lt;&lt;span style="color: #2b91af"&gt;MyClass&lt;/span&gt;&amp;gt;();

    &lt;span style="color: #0000ff"&gt;string &lt;/span&gt;input = &lt;span style="color: #a31515"&gt;"test value"&lt;/span&gt;;
    &lt;span style="color: #0000ff"&gt;int &lt;/span&gt;expectedOutput1 = 1;
    &lt;span style="color: #0000ff"&gt;double &lt;/span&gt;expectedOutput2 = 2;

    targetMock.ExpectAndReturn(
        &lt;span style="color: #a31515"&gt;"MyMethod"&lt;/span&gt;,
        &lt;span style="color: #0000ff"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DynamicReturnValue&lt;/span&gt;(&lt;span style="color: #0000ff"&gt;delegate&lt;/span&gt;(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;[] parameters, &lt;span style="color: #0000ff"&gt;object &lt;/span&gt;context)
            {
                parameters[1] = expectedOutput1;
                parameters[2] = expectedOutput2;
                &lt;span style="color: #0000ff"&gt;return true&lt;/span&gt;;
            }));

    &lt;span style="color: #0000ff"&gt;int &lt;/span&gt;output1;
    &lt;span style="color: #0000ff"&gt;double &lt;/span&gt;output2;
    &lt;span style="color: #0000ff"&gt;bool &lt;/span&gt;result = targetMock.Object.MyMethod(input, &lt;span style="color: #0000ff"&gt;out &lt;/span&gt;output1, &lt;span style="color: #0000ff"&gt;out &lt;/span&gt;output2);

    &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.IsTrue(result);
    &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual&amp;lt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;gt;(expectedOutput1, output1);
    &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual&amp;lt;&lt;span style="color: #0000ff"&gt;double&lt;/span&gt;&amp;gt;(expectedOutput2, output2);
}&lt;/pre&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p&gt;Só é preciso escolher a API de que se gosta mais.&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;
&lt;p&gt;[Cross-Posted de &lt;a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/"&gt;http://www.arquitecturadesoftware.org/blogs/paulomorgado/&lt;/a&gt;]&lt;/p&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><a href="http://PauloMorgado.NET/"></a>  <p>Há algum tempo <a title="Unit Testing and Mock Frameworks" href="http://msmvps.com/blogs/paulomorgado/archive/2007/02/17/unit-testing-and-mock-frameworks.aspx#1648003" target="_blank">perguntaram-me</a> se seria possível forjar parâmetros de saída usando o <a title="Typemock - Simplify Unit Testing!" href="http://www.typemock.com/" target="_blank"></a><a title="Typemock Isolator - Serious Development" href="http://www.typemock.com/Product.html" target="_blank">Typemock Isolator</a>.</p> <a href="http://PauloMorgado.NET/"></a>  <p>Na verdade é muito fácil de o fazer usand qualquer uma das APIs disponíveis.</p> <a href="http://PauloMorgado.NET/"></a>  <p>Dada esta classe:</p> <a href="http://PauloMorgado.NET/"></a>  <pre class="code"><span style="color: #0000ff">public class </span><span style="color: #2b91af">MyClass
</span>{
    <span style="color: #0000ff">public bool </span>MyMethod(<span style="color: #0000ff">string </span>input, <span style="color: #0000ff">out int </span>output1, <span style="color: #0000ff">out double </span>output2)
    {
        <span style="color: #0000ff">throw new </span><span style="color: #2b91af">NotImplementedException</span>();
    }
}</pre>

<p><a href="http://11011.net/software/vspaste"></a></p>

<p>Usando a nova API AAA, é tão limpo omo:</p>

<pre class="code">[<span style="color: #2b91af">TestMethod</span>]
[<span style="color: #2b91af">Isolated</span>]
<span style="color: blue">public void </span>TestMethodIsolated()
{
    <span style="color: #2b91af">MyClass </span>target = <span style="color: #2b91af">Isolate</span>.Fake.Instance&lt;<span style="color: #2b91af">MyClass</span>&gt;();

    <span style="color: blue">string </span>input = <span style="color: #a31515">"test value"</span>;
    <span style="color: blue">int </span>expectedOutput1 = 1;
    <span style="color: blue">double </span>expectedOutput2 = 2;

    <span style="color: #2b91af">Isolate</span>.WhenCalled(() =&gt; target.MyMethod(input, <span style="color: blue">out </span>expectedOutput1, <span style="color: blue">out </span>expectedOutput2)).WillReturn(<span style="color: blue">true</span>);

    <span style="color: blue">int </span>output1;
    <span style="color: blue">double </span>output2;
    <span style="color: blue">bool </span>result = target.MyMethod(input, <span style="color: blue">out </span>output1, <span style="color: blue">out </span>output2);

    <span style="color: #2b91af">Assert</span>.IsTrue(result);
    <span style="color: #2b91af">Assert</span>.AreEqual&lt;<span style="color: blue">int</span>&gt;(expectedOutput1, output1);
    <span style="color: #2b91af">Assert</span>.AreEqual&lt;<span style="color: blue">double</span>&gt;(expectedOutput2, output2);
}</pre>
<a href="http://11011.net/software/vspaste"></a><a href="http://PauloMorgado.NET/"></a>

<p>Usando Natural Mocks, é tão fácil como:</p>
<a href="http://PauloMorgado.NET/"></a>

<pre class="code">[<span style="color: #2b91af">TestMethod</span>]
[<span style="color: #2b91af">VerifyMocks</span>]
<span style="color: #0000ff">public void </span>TestMethodNatural()
{
    <span style="color: #2b91af">MyClass </span>target = <span style="color: #2b91af">RecorderManager</span>.CreateMockedObject&lt;<span style="color: #2b91af">MyClass</span>&gt;();

    <span style="color: #0000ff">string </span>input = <span style="color: #a31515">"test value"</span>;
    <span style="color: #0000ff">int </span>expectedOutput1 = 1;
    <span style="color: #0000ff">double </span>expectedOutput2 = 2;

    <span style="color: #0000ff">using </span>(<span style="color: #2b91af">RecordExpectations </span>recorder = <span style="color: #2b91af">RecorderManager</span>.StartRecording())
    {
        recorder.ExpectAndReturn(target.MyMethod(input, <span style="color: #0000ff">out </span>expectedOutput1, <span style="color: #0000ff">out </span>expectedOutput2), <span style="color: #0000ff">true</span>);
    }

    <span style="color: #0000ff">int </span>output1;
    <span style="color: #0000ff">double </span>output2;
    <span style="color: #0000ff">bool </span>result = target.MyMethod(input, <span style="color: #0000ff">out </span>output1, <span style="color: #0000ff">out </span>output2);

    <span style="color: #2b91af">Assert</span>.IsTrue(result);
    <span style="color: #2b91af">Assert</span>.AreEqual&lt;<span style="color: #0000ff">int</span>&gt;(expectedOutput1, output1);
    <span style="color: #2b91af">Assert</span>.AreEqual&lt;<span style="color: #0000ff">double</span>&gt;(expectedOutput2, output2);
}</pre>
<a href="http://11011.net/software/vspaste"></a><a href="http://PauloMorgado.NET/"></a>

<p>Também é possível usando Reflective Mocks:</p>
<a href="http://PauloMorgado.NET/"></a>

<pre class="code">[<span style="color: #2b91af">TestMethod</span>]
[<span style="color: #2b91af">VerifyMocks</span>]
<span style="color: #0000ff">public void </span>TestMethodReflective()
{
    <span style="color: #2b91af">MockObject</span>&lt;<span style="color: #2b91af">MyClass</span>&gt; targetMock = <span style="color: #2b91af">MockManager</span>.MockObject&lt;<span style="color: #2b91af">MyClass</span>&gt;();

    <span style="color: #0000ff">string </span>input = <span style="color: #a31515">"test value"</span>;
    <span style="color: #0000ff">int </span>expectedOutput1 = 1;
    <span style="color: #0000ff">double </span>expectedOutput2 = 2;

    targetMock.ExpectAndReturn(
        <span style="color: #a31515">"MyMethod"</span>,
        <span style="color: #0000ff">new </span><span style="color: #2b91af">DynamicReturnValue</span>(<span style="color: #0000ff">delegate</span>(<span style="color: #0000ff">object</span>[] parameters, <span style="color: #0000ff">object </span>context)
            {
                parameters[1] = expectedOutput1;
                parameters[2] = expectedOutput2;
                <span style="color: #0000ff">return true</span>;
            }));

    <span style="color: #0000ff">int </span>output1;
    <span style="color: #0000ff">double </span>output2;
    <span style="color: #0000ff">bool </span>result = targetMock.Object.MyMethod(input, <span style="color: #0000ff">out </span>output1, <span style="color: #0000ff">out </span>output2);

    <span style="color: #2b91af">Assert</span>.IsTrue(result);
    <span style="color: #2b91af">Assert</span>.AreEqual&lt;<span style="color: #0000ff">int</span>&gt;(expectedOutput1, output1);
    <span style="color: #2b91af">Assert</span>.AreEqual&lt;<span style="color: #0000ff">double</span>&gt;(expectedOutput2, output2);
}</pre>
<a href="http://PauloMorgado.NET/"></a>

<p>Só é preciso escolher a API de que se gosta mais.</p>
<a href="http://PauloMorgado.NET/"></a>
<p>[Cross-Posted de <a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/">http://www.arquitecturadesoftware.org/blogs/paulomorgado/</a>]</p></body></item><item><dc:creator>Paulo Morgado</dc:creator><title>SAPO Codebits 2008</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28273.aspx</link><pubDate>Tue, 30 Sep 2008 01:02:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28273.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28273.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28273.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28273.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28273</trackback:ping><description>&lt;p&gt;&lt;a title="SAPO Codebits 2008" href="http://codebits.sapo.pt/" target="_blank"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" src="http://codebits.sapo.pt/imgs/logo.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;O &lt;a title="SAPO Codebits 2008" href="http://codebits.sapo.pt/" target="_blank"&gt;SAPO Codebits 2008&lt;/a&gt; está aí. &lt;a title="Regista-te no SAPO Codebits 2008" href="http://codebits.sapo.pt/s/register" target="_blank"&gt;Inscrevam-se&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;[Cross-Posted de &lt;a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/"&gt;http://www.arquitecturadesoftware.org/blogs/paulomorgado/&lt;/a&gt;]&lt;/p&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p><a title="SAPO Codebits 2008" href="http://codebits.sapo.pt/" target="_blank"><img style="display: block; float: none; margin-left: auto; margin-right: auto" src="http://codebits.sapo.pt/imgs/logo.jpg" /></a> </p>  <p>O <a title="SAPO Codebits 2008" href="http://codebits.sapo.pt/" target="_blank">SAPO Codebits 2008</a> está aí. <a title="Regista-te no SAPO Codebits 2008" href="http://codebits.sapo.pt/s/register" target="_blank">Inscrevam-se</a>.</p>
<p>[Cross-Posted de <a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/">http://www.arquitecturadesoftware.org/blogs/paulomorgado/</a>]</p></body></item><item><dc:creator>Paulo Morgado</dc:creator><title>Tech&amp;#183;Ed EMEA 2008 Developers: Meet Me In Barcelona</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28249.aspx</link><pubDate>Mon, 22 Sep 2008 01:23:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28249.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28249.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28249.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28249.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28249</trackback:ping><description>&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;&lt;a title="Tech·Ed EMEA 2008 Developers" href="http://www.microsoft.com/emea/teched2008/developer/" target="_blank"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" src="http://www.microsoft.com/emea/teched2008/images/downloads/sigs/TechEd_Developers_Signature.JPG" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;Mais uma vez estarei numa banca ATE no &lt;a title="Tech·Ed EMEA 2008 Developers" href="http://www.microsoft.com/emea/teched2008/developer/" target="_blank"&gt;Tech·Ed EMEA 2008 Developers&lt;/a&gt;.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;tal como já tinha &lt;a title="PDC2008: Encontramo-nos Em Los Angeles" href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2008/09/04/pdc2008-encontramo-nos-em-los-angeles.aspx" target="_blank"&gt;dito&lt;/a&gt; acerca do &lt;a title="Microsoft PDC" href="http://microsoftpdc.com/" target="_blank"&gt;PDC&lt;/a&gt;, o que gosto mais destes eventos é a convivência com as pessoas da Microsoft e com os outros participantes. Portanto, se se quiserem encontrar comigo, terei muito gosto em encontrar-me convosco.&lt;/p&gt;
&lt;p&gt;[Cross-Posted de &lt;a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/"&gt;http://www.arquitecturadesoftware.org/blogs/paulomorgado/&lt;/a&gt;]&lt;/p&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><a href="http://PauloMorgado.NET/"></a>  <p><a title="Tech·Ed EMEA 2008 Developers" href="http://www.microsoft.com/emea/teched2008/developer/" target="_blank"><img style="display: block; float: none; margin-left: auto; margin-right: auto" src="http://www.microsoft.com/emea/teched2008/images/downloads/sigs/TechEd_Developers_Signature.JPG" /></a> </p> <a href="http://PauloMorgado.NET/"></a>  <p align="justify">Mais uma vez estarei numa banca ATE no <a title="Tech·Ed EMEA 2008 Developers" href="http://www.microsoft.com/emea/teched2008/developer/" target="_blank">Tech·Ed EMEA 2008 Developers</a>.</p> <a href="http://PauloMorgado.NET/"></a>  <p align="justify">tal como já tinha <a title="PDC2008: Encontramo-nos Em Los Angeles" href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2008/09/04/pdc2008-encontramo-nos-em-los-angeles.aspx" target="_blank">dito</a> acerca do <a title="Microsoft PDC" href="http://microsoftpdc.com/" target="_blank">PDC</a>, o que gosto mais destes eventos é a convivência com as pessoas da Microsoft e com os outros participantes. Portanto, se se quiserem encontrar comigo, terei muito gosto em encontrar-me convosco.</p>
<p>[Cross-Posted de <a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/">http://www.arquitecturadesoftware.org/blogs/paulomorgado/</a>]</p></body></item><item><dc:creator>Paulo Morgado</dc:creator><title>Livro LINQ Com C#</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28248.aspx</link><pubDate>Mon, 22 Sep 2008 00:57:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28248.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28248.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28248.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28248.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28248</trackback:ping><description>&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;O &lt;a title="Luís Abreu" href="http://msmvps.com/blogs/luisabreu/" target="_blank"&gt;Luís&lt;/a&gt; acabou de dar a &lt;a title="Future projects: Portuguese C# book on LINQ" href="http://msmvps.com/blogs/luisabreu/archive/2008/09/21/future-projects-portuguese-c-book-on-linq.aspx" target="_blank"&gt;notícia&lt;/a&gt; acerca do nosso livro sobre &lt;a title="Language-Integrated Query (LINQ)" href="http://msdn2.microsoft.com/library/bb397926.aspx" target="_blank"&gt;LINQ&lt;/a&gt; com &lt;a title="Visual C#" href="http://msdn.microsoft.com/vcsharp/" target="_blank"&gt;C#&lt;/a&gt;.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;Foi com enorme honra que aceitei o convite do Luís para escrever este livro para a &lt;a title="FCA- Livros de Informática / TI para todos os níveis" href="http://www.fca.pt/" target="_blank"&gt;FCA&lt;/a&gt;, para quem ele já tinha publicado alguns livros [&lt;a title="ASP.NET 2.0 - Curso Completo" href="http://www.fca.pt/cgi-bin/fca_main.cgi/?op=2&amp;amp;isbn=972-722-503-9" target="_blank"&gt;^&lt;/a&gt;] [&lt;a title="Ajax com ASP.Net Curso Completo" href="http://www.fca.pt/cgi-bin/fca_main.cgi/?op=2&amp;amp;isbn=978-972-722-551-4" target="_blank"&gt;^&lt;/a&gt;] [&lt;a title="ASP.NET 3.5 - Curso Completo" href="http://www.fca.pt/cgi-bin/fca_main.cgi/?op=2&amp;amp;isbn=978-972-722-615-3" target="_blank"&gt;^&lt;/a&gt;]. &lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;Este será um livro de introdução em Português dirigido a quem quiser aprender LINQ com C#.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;Tem sido um projecto divertido com grandes discuções (possíveis apenas porque meio oceano nos separa :) ).&lt;/p&gt;
&lt;p&gt;[Cross-Posted de &lt;a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/"&gt;http://www.arquitecturadesoftware.org/blogs/paulomorgado/&lt;/a&gt;]&lt;/p&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><a href="http://PauloMorgado.NET/"></a>  <p>O <a title="Luís Abreu" href="http://msmvps.com/blogs/luisabreu/" target="_blank">Luís</a> acabou de dar a <a title="Future projects: Portuguese C# book on LINQ" href="http://msmvps.com/blogs/luisabreu/archive/2008/09/21/future-projects-portuguese-c-book-on-linq.aspx" target="_blank">notícia</a> acerca do nosso livro sobre <a title="Language-Integrated Query (LINQ)" href="http://msdn2.microsoft.com/library/bb397926.aspx" target="_blank">LINQ</a> com <a title="Visual C#" href="http://msdn.microsoft.com/vcsharp/" target="_blank">C#</a>.</p> <a href="http://PauloMorgado.NET/"></a>  <p>Foi com enorme honra que aceitei o convite do Luís para escrever este livro para a <a title="FCA- Livros de Informática / TI para todos os níveis" href="http://www.fca.pt/" target="_blank">FCA</a>, para quem ele já tinha publicado alguns livros [<a title="ASP.NET 2.0 - Curso Completo" href="http://www.fca.pt/cgi-bin/fca_main.cgi/?op=2&amp;isbn=972-722-503-9" target="_blank">^</a>] [<a title="Ajax com ASP.Net Curso Completo" href="http://www.fca.pt/cgi-bin/fca_main.cgi/?op=2&amp;isbn=978-972-722-551-4" target="_blank">^</a>] [<a title="ASP.NET 3.5 - Curso Completo" href="http://www.fca.pt/cgi-bin/fca_main.cgi/?op=2&amp;isbn=978-972-722-615-3" target="_blank">^</a>]. </p> <a href="http://PauloMorgado.NET/"></a>  <p>Este será um livro de introdução em Português dirigido a quem quiser aprender LINQ com C#.</p> <a href="http://PauloMorgado.NET/"></a>  <p>Tem sido um projecto divertido com grandes discuções (possíveis apenas porque meio oceano nos separa :) ).</p>
<p>[Cross-Posted de <a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/">http://www.arquitecturadesoftware.org/blogs/paulomorgado/</a>]</p></body></item><item><dc:creator>Paulo Morgado</dc:creator><title>PDC2008: Encontramo-nos Em Los Angeles</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28192.aspx</link><pubDate>Thu, 04 Sep 2008 01:53:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28192.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28192.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28192.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28192.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28192</trackback:ping><description>&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="center"&gt;&lt;a title="Microsoft PDC" href="http://microsoftpdc.com/" target="_blank"&gt;&lt;img src="http://microsoftpdc.com/Images/Wallpapers/frenetic_multi_thumb.jpg" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;Não é a primeira vez que tento mas, por uma razão ou outra, esta é a primeira vez que vou ao &lt;a title="Microsoft PDC" href="http://microsoftpdc.com/" target="_blank"&gt;PDC&lt;/a&gt; (&lt;a title="Microsoft Corporation" href="http://www.microsoft.com/" target="_blank"&gt;Microsoft&lt;/a&gt;’s Professional Developers Conference).&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;De acordo com o sítio do evento, “O PDC é projectado para arquitectos de software e programadores avançados. Se estão interessados no futuro da plataforma Microsoft, se são responsáveis pela estratégia tecnológica a vossa organização ou se são profissionais altamente qualificados que gostam de mergulhar o coração da plataforma, então o PDC é para vós!”. Se se revêm nesta descrição, não percam tempo e registem-se. O desconto Early Bird foi extendido até 8 de Setembro.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;O que gosto mais destes eventos é a convivência com as pessoas da Microsoft e com os outros participantes. Portanto, se se quiserem encontrar comigo, terei muito gosto em encontrar-me convosco.&lt;/p&gt;
&lt;p&gt;[Cross-Posted de &lt;a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/"&gt;http://www.arquitecturadesoftware.org/blogs/paulomorgado/&lt;/a&gt;]&lt;/p&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><a href="http://PauloMorgado.NET/"></a>  <p align="center"><a title="Microsoft PDC" href="http://microsoftpdc.com/" target="_blank"><img src="http://microsoftpdc.com/Images/Wallpapers/frenetic_multi_thumb.jpg" /></a> </p> <a href="http://PauloMorgado.NET/"></a>  <p align="justify">Não é a primeira vez que tento mas, por uma razão ou outra, esta é a primeira vez que vou ao <a title="Microsoft PDC" href="http://microsoftpdc.com/" target="_blank">PDC</a> (<a title="Microsoft Corporation" href="http://www.microsoft.com/" target="_blank">Microsoft</a>’s Professional Developers Conference).</p> <a href="http://PauloMorgado.NET/"></a>  <p align="justify">De acordo com o sítio do evento, “O PDC é projectado para arquitectos de software e programadores avançados. Se estão interessados no futuro da plataforma Microsoft, se são responsáveis pela estratégia tecnológica a vossa organização ou se são profissionais altamente qualificados que gostam de mergulhar o coração da plataforma, então o PDC é para vós!”. Se se revêm nesta descrição, não percam tempo e registem-se. O desconto Early Bird foi extendido até 8 de Setembro.</p> <a href="http://PauloMorgado.NET/"></a>  <p align="justify">O que gosto mais destes eventos é a convivência com as pessoas da Microsoft e com os outros participantes. Portanto, se se quiserem encontrar comigo, terei muito gosto em encontrar-me convosco.</p>
<p>[Cross-Posted de <a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/">http://www.arquitecturadesoftware.org/blogs/paulomorgado/</a>]</p></body></item><item><dc:creator>Paulo Morgado</dc:creator><title>Pakua FeedCenter: Novo Agregador De Conte&amp;#250;dos T&amp;#233;cnicos Da Comunidade Microsoft</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28164.aspx</link><pubDate>Fri, 29 Aug 2008 00:24:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28164.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28164.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28164.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28164.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28164</trackback:ping><description>&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="center"&gt;&lt;a title="Pakua FeedCenter" href="http://feedcenter.pakua-it.com/" target="_blank"&gt;&lt;img src="http://feedcenter.pakua-it.com/images/header00.png" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;Se proucuram conteúdos técnicos em Português sobre tecnologias &lt;a title="Microsoft Corporation" href="http://www.microsoft.com/" target="_blank"&gt;Microsoft&lt;/a&gt;, visitem o &lt;a title="Pakua FeedCenter" href="http://feedcenter.pakua-it.com/About.aspx" target="_blank"&gt;Pakua FeedCenter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;[Cross-Posted de &lt;a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/"&gt;http://www.arquitecturadesoftware.org/blogs/paulomorgado/&lt;/a&gt;]&lt;/p&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><a href="http://PauloMorgado.NET/"></a>  <p align="center"><a title="Pakua FeedCenter" href="http://feedcenter.pakua-it.com/" target="_blank"><img src="http://feedcenter.pakua-it.com/images/header00.png" /></a> </p> <a href="http://PauloMorgado.NET/"></a>  <p align="justify">Se proucuram conteúdos técnicos em Português sobre tecnologias <a title="Microsoft Corporation" href="http://www.microsoft.com/" target="_blank">Microsoft</a>, visitem o <a title="Pakua FeedCenter" href="http://feedcenter.pakua-it.com/About.aspx" target="_blank">Pakua FeedCenter</a>.</p>
<p>[Cross-Posted de <a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/">http://www.arquitecturadesoftware.org/blogs/paulomorgado/</a>]</p></body></item><item><dc:creator>Paulo Morgado</dc:creator><title>Clone Detective Para Visual Studio</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28163.aspx</link><pubDate>Thu, 28 Aug 2008 23:46:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28163.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28163.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28163.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28163.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28163</trackback:ping><description>&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="center"&gt;&lt;a title="Clone Detective for Visual Studio" href="http://www.codeplex.com/CloneDetectiveVS" target="_blank"&gt;&lt;img title="Clone Detective for Visual Studio" alt="Clone Detective for Visual Studio" src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=CloneDetectiveVS&amp;amp;DownloadId=41494" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;O &lt;a title="Clone Detective for Visual Studio" href="http://www.codeplex.com/CloneDetectiveVS" target="_blank"&gt;Clone Detective&lt;/a&gt; é uma ferramenta que integra com o &lt;a title="Microsoft Visual Studio" href="http://msdn.microsoft.com/vstudio/" target="_blank"&gt;Visual Studio&lt;/a&gt; e usa o &lt;a title="ConQAT (Continuous Quality Assessment Toolkit)" href="http://conqat.cs.tum.edu/" target="_blank"&gt;ConQAT&lt;/a&gt; (&lt;strong&gt;Con&lt;/strong&gt;tinuous &lt;strong&gt;Q&lt;/strong&gt;uality &lt;strong&gt;A&lt;/strong&gt;ssessment &lt;strong&gt;T&lt;/strong&gt;oolkit) para analizar projectos &lt;a title="Visual C#" href="http://msdn.microsoft.com/vcsharp/" target="_blank"&gt;C#&lt;/a&gt; e procurar código fonte duplicado.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;Vejam os &lt;a title="Clone Detective Videos" href="http://www.codeplex.com/CloneDetectiveVS/Wiki/View.aspx?title=Videos" target="_blank"&gt;vídeos&lt;/a&gt; e vejam se esta é a ferramenta que procuravam.&lt;/p&gt;
&lt;p&gt;[Cross-Posted de &lt;a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/"&gt;http://www.arquitecturadesoftware.org/blogs/paulomorgado/&lt;/a&gt;]&lt;/p&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><a href="http://PauloMorgado.NET/"></a>  <p align="center"><a title="Clone Detective for Visual Studio" href="http://www.codeplex.com/CloneDetectiveVS" target="_blank"><img title="Clone Detective for Visual Studio" alt="Clone Detective for Visual Studio" src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=CloneDetectiveVS&amp;DownloadId=41494" /></a> </p> <a href="http://PauloMorgado.NET/"></a>  <p align="justify">O <a title="Clone Detective for Visual Studio" href="http://www.codeplex.com/CloneDetectiveVS" target="_blank">Clone Detective</a> é uma ferramenta que integra com o <a title="Microsoft Visual Studio" href="http://msdn.microsoft.com/vstudio/" target="_blank">Visual Studio</a> e usa o <a title="ConQAT (Continuous Quality Assessment Toolkit)" href="http://conqat.cs.tum.edu/" target="_blank">ConQAT</a> (<strong>Con</strong>tinuous <strong>Q</strong>uality <strong>A</strong>ssessment <strong>T</strong>oolkit) para analizar projectos <a title="Visual C#" href="http://msdn.microsoft.com/vcsharp/" target="_blank">C#</a> e procurar código fonte duplicado.</p> <a href="http://PauloMorgado.NET/"></a>  <p align="justify">Vejam os <a title="Clone Detective Videos" href="http://www.codeplex.com/CloneDetectiveVS/Wiki/View.aspx?title=Videos" target="_blank">vídeos</a> e vejam se esta é a ferramenta que procuravam.</p>
<p>[Cross-Posted de <a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/">http://www.arquitecturadesoftware.org/blogs/paulomorgado/</a>]</p></body></item><item><dc:creator>Paulo Morgado</dc:creator><title>Oferta De Desconto Para A Comunidade Na Subscri&amp;#231;&amp;#227;o Da E-Reference Library</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28138.aspx</link><pubDate>Thu, 21 Aug 2008 23:46:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28138.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28138.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28138.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28138.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28138</trackback:ping><description>&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;A &lt;a title="Microsoft Press Books" href="http://www.microsoft.com/press/" target="_blank"&gt;Microsoft Press&lt;/a&gt; criou  um URL exclusivo para um desconto na subscrição da E-Reference Library para os &lt;a title="Microsoft Most Valuable Professional" href="http://mvp.support.microsoft.com" target="_blank"&gt;MVP&lt;/a&gt;s passarem à comunidade, sem quaisquer limitações ou restrições.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;Para criar uma subscrição experimental, deve ser usado o URL Experimental (&lt;a href="http://microsofteref2.books24x7.com/promo.asp?ref=mvptry"&gt;http://microsofteref2.books24x7.com/promo.asp?ref=mvptry&lt;/a&gt;).&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;Qualquer membro da comunidade que subscreva a E-Reference Libraries através do URL de Subscrição (&lt;a href="http://microsofteref2.books24x7.com/promo.asp?ref=mvpbuy"&gt;http://microsofteref2.books24x7.com/promo.asp?ref=mvpbuy&lt;/a&gt;) terá direito a um &lt;strong&gt;desconto de 40%&lt;/strong&gt; numa subscrição de um ano.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;Esta oferta termina a 30 de Setembro de 2008.&lt;/p&gt;
&lt;p&gt;[Cross-Posted de &lt;a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/"&gt;http://www.arquitecturadesoftware.org/blogs/paulomorgado/&lt;/a&gt;]&lt;/p&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><a href="http://PauloMorgado.NET/"></a>  <p>A <a title="Microsoft Press Books" href="http://www.microsoft.com/press/" target="_blank">Microsoft Press</a> criou  um URL exclusivo para um desconto na subscrição da E-Reference Library para os <a title="Microsoft Most Valuable Professional" href="http://mvp.support.microsoft.com" target="_blank">MVP</a>s passarem à comunidade, sem quaisquer limitações ou restrições.</p> <a href="http://PauloMorgado.NET/"></a>  <p>Para criar uma subscrição experimental, deve ser usado o URL Experimental (<a href="http://microsofteref2.books24x7.com/promo.asp?ref=mvptry">http://microsofteref2.books24x7.com/promo.asp?ref=mvptry</a>).</p> <a href="http://PauloMorgado.NET/"></a>  <p>Qualquer membro da comunidade que subscreva a E-Reference Libraries através do URL de Subscrição (<a href="http://microsofteref2.books24x7.com/promo.asp?ref=mvpbuy">http://microsofteref2.books24x7.com/promo.asp?ref=mvpbuy</a>) terá direito a um <strong>desconto de 40%</strong> numa subscrição de um ano.</p> <a href="http://PauloMorgado.NET/"></a>  <p>Esta oferta termina a 30 de Setembro de 2008.</p>
<p>[Cross-Posted de <a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/">http://www.arquitecturadesoftware.org/blogs/paulomorgado/</a>]</p></body></item><item><dc:creator>Paulo Morgado</dc:creator><title>Saiu O StyleCop 4.3</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28136.aspx</link><pubDate>Thu, 21 Aug 2008 00:42:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28136.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28136.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28136.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28136.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28136</trackback:ping><description>&lt;a href="http;//PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;A &lt;a title="Microsoft StyleCop" href="http://blogs.msdn.com/sourceanalysis/" target="_blank"&gt;equiopa do StyleCop&lt;/a&gt; &lt;a title="StyleCop 4.3 Is Released" href="http://blogs.msdn.com/sourceanalysis/archive/2008/08/19/stylecop-4-3-is-released.aspx" target="_blank"&gt;anunciou&lt;/a&gt; a saída da versão 4.3 da &lt;a title="Microsoft StyleCop" href="http://code.msdn.microsoft.com/sourceanalysis" target="_blank"&gt;ferramenta StyleCop&lt;/a&gt;. Podem obtê-la &lt;a title="StyleCop 4.3" href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sourceanalysis&amp;amp;ReleaseId=1425" target="_blank"&gt;aqui&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Esta versão contem algumas correcções de erros, novas regras e documentação.&lt;/p&gt; &lt;a href="http;//PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;Também nesta versão, a lista de erros e avisos vai para a janela &lt;strong&gt;Errors List&lt;/strong&gt; como acontece com os compiladores. Gostava que os erros e avisos também fossem para a janela &lt;strong&gt;Output&lt;/strong&gt;.&lt;/p&gt; &lt;a href="http;//PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;A documentação do SDK para o desenvolvimento de regras próprias e integração com outros sistemas de &lt;em&gt;build&lt;/em&gt; é esperada para breve.&lt;/p&gt;
&lt;p&gt;[Cross-Posted de &lt;a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/"&gt;http://www.arquitecturadesoftware.org/blogs/paulomorgado/&lt;/a&gt;]&lt;/p&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><a href="http;//PauloMorgado.NET/"></a>  <p>A <a title="Microsoft StyleCop" href="http://blogs.msdn.com/sourceanalysis/" target="_blank">equiopa do StyleCop</a> <a title="StyleCop 4.3 Is Released" href="http://blogs.msdn.com/sourceanalysis/archive/2008/08/19/stylecop-4-3-is-released.aspx" target="_blank">anunciou</a> a saída da versão 4.3 da <a title="Microsoft StyleCop" href="http://code.msdn.microsoft.com/sourceanalysis" target="_blank">ferramenta StyleCop</a>. Podem obtê-la <a title="StyleCop 4.3" href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sourceanalysis&amp;ReleaseId=1425" target="_blank">aqui</a>.</p>  <p>Esta versão contem algumas correcções de erros, novas regras e documentação.</p> <a href="http;//PauloMorgado.NET/"></a>  <p>Também nesta versão, a lista de erros e avisos vai para a janela <strong>Errors List</strong> como acontece com os compiladores. Gostava que os erros e avisos também fossem para a janela <strong>Output</strong>.</p> <a href="http;//PauloMorgado.NET/"></a>  <p>A documentação do SDK para o desenvolvimento de regras próprias e integração com outros sistemas de <em>build</em> é esperada para breve.</p>
<p>[Cross-Posted de <a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/">http://www.arquitecturadesoftware.org/blogs/paulomorgado/</a>]</p></body></item><item><dc:creator>Paulo Morgado</dc:creator><title>O Lutz Roeder’s .NET Reflector &amp;#201; Agora O Red Gate’s .NET Reflector</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28135.aspx</link><pubDate>Wed, 20 Aug 2008 23:54:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28135.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28135.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28135.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28135.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28135</trackback:ping><description>&lt;a href="http;//PauloMorgado.NET/"&gt;&lt;/a&gt;
&lt;p&gt;Convenhamos, quem não conhece o &lt;a title=".NET Framework Developer Center" href="http://msdn.microsoft.com/netframework/" target="_blank"&gt;.NET&lt;/a&gt; Reflector não pode afirmar que desenvolve em .NET.&lt;/p&gt;&lt;a href="http;//PauloMorgado.NET/"&gt;&lt;/a&gt;
&lt;p&gt;Hoje, a &lt;a title="redgate - ingeniously simple tools" href="http://www.red-gate.com/" target="_blank"&gt;Red Gate&lt;/a&gt; anunciou a aquisição do Lutz Roeder’s .NET Reflector.&lt;/p&gt;&lt;a href="http;//PauloMorgado.NET/"&gt;&lt;/a&gt;
&lt;p&gt;Na nova página do &lt;a title=".NET Reflector" href="http://reflector.red-gate.com/" target="_blank"&gt;.NET Reflector&lt;/a&gt;, a Red Gate afirma que “continuará a &lt;strong&gt;manter uma versão gratuita para o benefício da comunidade&lt;/strong&gt;”.&lt;/p&gt;&lt;a href="http;//PauloMorgado.NET/"&gt;&lt;/a&gt;
&lt;p&gt;Podem ler a &lt;a title="The Future of Reflector" href="http://www.simple-talk.com/opinion/opinion-pieces/the-future-of-reflector-/" target="_blank"&gt;entrevista&lt;/a&gt; com Lutz Roeder e James Moore (director geral de ferramentas de desenvolvimento .NET da Red Gate) na &lt;a title="simple-talk - SQL Server and .NET put simply" href="http://www.simple-talk.com/" target="_blank"&gt;simple-talk&lt;/a&gt;.&lt;/p&gt;&lt;a href="http;//PauloMorgado.NET/"&gt;&lt;/a&gt;
&lt;p&gt;O James ainda não sabe como melhorar o &lt;a title="Reflector for .NET" href="http://www.aisto.com/roeder/dotnet/" target="_blank"&gt;Reflector&lt;/a&gt;, mas eu sei. O Reflector necessita de importantes melhoramentos ao nível da usabilidade da interface com o utilizador. Vejamos se consigo arranjar uma lista:&lt;/p&gt;&lt;a href="http;//PauloMorgado.NET/"&gt;&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Para mim, a pesquisa enquanto se digita não é uma boa ideia tal como está no Reflector. 
&lt;/li&gt;&lt;li&gt;Ainda no tema da pesquisa, pesquisa enquanto se digita já seria uma boa ideia para a janela de código. 
&lt;/li&gt;&lt;li&gt;Não consigo perceber porque mudar alguma opção dispara um refrescamento total da aplicação perdendo-se a janela de código. 
&lt;/li&gt;&lt;li&gt;Definições como a formatação de código, documentação ou números deveria ser possível apenas com o simples premir de um botão numa barra de botões. &lt;/li&gt;&lt;/ul&gt;&lt;a href="http;//PauloMorgado.NET/"&gt;&lt;/a&gt;
&lt;p&gt;Tenho a certeza que a Red Gate é mais do que capaz de tomar bem conta do .NET Reflector.&lt;/p&gt;
&lt;p&gt;[Cross-Posted de &lt;a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/"&gt;http://www.arquitecturadesoftware.org/blogs/paulomorgado/&lt;/a&gt;]&lt;/p&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><a href="http;//PauloMorgado.NET/"></a>
<p>Convenhamos, quem não conhece o <a title=".NET Framework Developer Center" href="http://msdn.microsoft.com/netframework/" target="_blank">.NET</a> Reflector não pode afirmar que desenvolve em .NET.</p><a href="http;//PauloMorgado.NET/"></a>
<p>Hoje, a <a title="redgate - ingeniously simple tools" href="http://www.red-gate.com/" target="_blank">Red Gate</a> anunciou a aquisição do Lutz Roeder’s .NET Reflector.</p><a href="http;//PauloMorgado.NET/"></a>
<p>Na nova página do <a title=".NET Reflector" href="http://reflector.red-gate.com/" target="_blank">.NET Reflector</a>, a Red Gate afirma que “continuará a <strong>manter uma versão gratuita para o benefício da comunidade</strong>”.</p><a href="http;//PauloMorgado.NET/"></a>
<p>Podem ler a <a title="The Future of Reflector" href="http://www.simple-talk.com/opinion/opinion-pieces/the-future-of-reflector-/" target="_blank">entrevista</a> com Lutz Roeder e James Moore (director geral de ferramentas de desenvolvimento .NET da Red Gate) na <a title="simple-talk - SQL Server and .NET put simply" href="http://www.simple-talk.com/" target="_blank">simple-talk</a>.</p><a href="http;//PauloMorgado.NET/"></a>
<p>O James ainda não sabe como melhorar o <a title="Reflector for .NET" href="http://www.aisto.com/roeder/dotnet/" target="_blank">Reflector</a>, mas eu sei. O Reflector necessita de importantes melhoramentos ao nível da usabilidade da interface com o utilizador. Vejamos se consigo arranjar uma lista:</p><a href="http;//PauloMorgado.NET/"></a>
<ul>
<li>Para mim, a pesquisa enquanto se digita não é uma boa ideia tal como está no Reflector. 
</li><li>Ainda no tema da pesquisa, pesquisa enquanto se digita já seria uma boa ideia para a janela de código. 
</li><li>Não consigo perceber porque mudar alguma opção dispara um refrescamento total da aplicação perdendo-se a janela de código. 
</li><li>Definições como a formatação de código, documentação ou números deveria ser possível apenas com o simples premir de um botão numa barra de botões. </li></ul><a href="http;//PauloMorgado.NET/"></a>
<p>Tenho a certeza que a Red Gate é mais do que capaz de tomar bem conta do .NET Reflector.</p>
<p>[Cross-Posted de <a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/">http://www.arquitecturadesoftware.org/blogs/paulomorgado/</a>]</p></body></item><item><dc:creator>Paulo Morgado</dc:creator><title>Saiu A Alfa Do Typemock Racer</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28134.aspx</link><pubDate>Wed, 20 Aug 2008 23:45:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28134.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28134.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28134.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28134.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28134</trackback:ping><description>&lt;a href="http;//PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;A &lt;a title="Typemock - Simplify Unit Testing!" href="http://www.typemock.com/" target="_blank"&gt;Typemock&lt;/a&gt; lançou uma versão alfa do seu mais recente produto: &lt;a title="Quick Start Guide – Typemock Racer" href="http://www.typemock.com/community/viewtopic.php?topic=908&amp;amp;forum=18" target="_blank"&gt;Typemock Racer&lt;/a&gt;.&lt;/p&gt; &lt;a href="http;//PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;O &lt;strong&gt;Typemock Racer&lt;/strong&gt; é a ferramenta que usa análise dinâmica e estática para encontrar bloqueios em código .NET que tinha sido &lt;a title="A sneak Preview of Typemock Racer : Thread Deadlock Finder" href="http://weblogs.asp.net/rosherove/archive/2008/07/08/a-sneak-preview-of-typemock-racer.aspx" target="_blank"&gt;anuncianda&lt;/a&gt; pelo &lt;a title="ISerializable - Roy Osherove's Blog" href="http://weblogs.asp.net/rosherove/" target="_blank"&gt;Roy Osherove&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;[Cross-Posted de &lt;a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/"&gt;http://www.arquitecturadesoftware.org/blogs/paulomorgado/&lt;/a&gt;]&lt;/p&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><a href="http;//PauloMorgado.NET/"></a>  <p>A <a title="Typemock - Simplify Unit Testing!" href="http://www.typemock.com/" target="_blank">Typemock</a> lançou uma versão alfa do seu mais recente produto: <a title="Quick Start Guide – Typemock Racer" href="http://www.typemock.com/community/viewtopic.php?topic=908&amp;forum=18" target="_blank">Typemock Racer</a>.</p> <a href="http;//PauloMorgado.NET/"></a>  <p>O <strong>Typemock Racer</strong> é a ferramenta que usa análise dinâmica e estática para encontrar bloqueios em código .NET que tinha sido <a title="A sneak Preview of Typemock Racer : Thread Deadlock Finder" href="http://weblogs.asp.net/rosherove/archive/2008/07/08/a-sneak-preview-of-typemock-racer.aspx" target="_blank">anuncianda</a> pelo <a title="ISerializable - Roy Osherove's Blog" href="http://weblogs.asp.net/rosherove/" target="_blank">Roy Osherove</a>.</p>
<p>[Cross-Posted de <a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/">http://www.arquitecturadesoftware.org/blogs/paulomorgado/</a>]</p></body></item><item><dc:creator>Paulo Morgado</dc:creator><title>Saiu o Typemock Isolator 5.0 Com A Sua Nova API AAA</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28133.aspx</link><pubDate>Wed, 20 Aug 2008 23:41:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28133.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28133.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28133.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28133.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28133</trackback:ping><description>&lt;a href="http;//PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;A &lt;a title="Typemock - Simplify Unit Testing!" href="http://www.typemock.com/" target="_blank"&gt;Typemock&lt;/a&gt; lançou a versão 5.0 da sua ferramenta de testes unitários: &lt;a title="Typemock Isolator - Serious Development" href="http://www.typemock.com/Product.html" target="_blank"&gt;Isolator&lt;/a&gt;. Vejam as &lt;a title="Typemock Isolator 5.0 Released" href="http://blog.typemock.com/2008/08/typemock-isolator-50-released.html" target="_blank"&gt;notas de lançamento&lt;/a&gt;.&lt;/p&gt; &lt;a href="http;//PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;Esta mais recente versão vem com a nova API: &lt;strong&gt;A&lt;/strong&gt;rrange&lt;strong&gt; A&lt;/strong&gt;ct &lt;strong&gt;A&lt;/strong&gt;ssert (Preparar – Executar - Validar):&lt;/p&gt; &lt;a href="http;//PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="Isolator AAA API - The Basics" href="http://blog.typemock.com/2008/08/isolator-aaa-api-basics.html" target="_blank"&gt;Isolator AAA API - The Basics&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="Isolator AAA: Creating Fakes" href="http://blog.typemock.com/2008/08/isolator-aaa-creating-fakes.html" target="_blank"&gt;Isolator AAA: Creating Fakes&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; &lt;a href="http;//PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;Devo dizer que gostava mais de &lt;strong&gt;Isolator&lt;/strong&gt; do que &lt;strong&gt;Isolate&lt;/strong&gt;.&lt;/p&gt; &lt;a href="http;//PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;Também novidade nesta versão é a inclusão do ficheiro de ajuda no pacote de instalação.&lt;/p&gt;
&lt;p&gt;[Cross-Posted de &lt;a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/"&gt;http://www.arquitecturadesoftware.org/blogs/paulomorgado/&lt;/a&gt;]&lt;/p&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><a href="http;//PauloMorgado.NET/"></a>  <p>A <a title="Typemock - Simplify Unit Testing!" href="http://www.typemock.com/" target="_blank">Typemock</a> lançou a versão 5.0 da sua ferramenta de testes unitários: <a title="Typemock Isolator - Serious Development" href="http://www.typemock.com/Product.html" target="_blank">Isolator</a>. Vejam as <a title="Typemock Isolator 5.0 Released" href="http://blog.typemock.com/2008/08/typemock-isolator-50-released.html" target="_blank">notas de lançamento</a>.</p> <a href="http;//PauloMorgado.NET/"></a>  <p>Esta mais recente versão vem com a nova API: <strong>A</strong>rrange<strong> A</strong>ct <strong>A</strong>ssert (Preparar – Executar - Validar):</p> <a href="http;//PauloMorgado.NET/"></a>  <ul>   <li><a title="Isolator AAA API - The Basics" href="http://blog.typemock.com/2008/08/isolator-aaa-api-basics.html" target="_blank">Isolator AAA API - The Basics</a> </li>    <li><a title="Isolator AAA: Creating Fakes" href="http://blog.typemock.com/2008/08/isolator-aaa-creating-fakes.html" target="_blank">Isolator AAA: Creating Fakes</a> </li> </ul> <a href="http;//PauloMorgado.NET/"></a>  <p>Devo dizer que gostava mais de <strong>Isolator</strong> do que <strong>Isolate</strong>.</p> <a href="http;//PauloMorgado.NET/"></a>  <p>Também novidade nesta versão é a inclusão do ficheiro de ajuda no pacote de instalação.</p>
<p>[Cross-Posted de <a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/">http://www.arquitecturadesoftware.org/blogs/paulomorgado/</a>]</p></body></item><item><dc:creator>Paulo Morgado</dc:creator><title>VHD Resizer: Ferramenta Para Redimensionar Ficheiros VHD</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28125.aspx</link><pubDate>Sun, 17 Aug 2008 23:16:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28125.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28125.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28125.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28125.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28125</trackback:ping><description>&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;Enquanto instalava o &lt;a title="Microsoft SQL Server" href="http://www.microsoft.com/sqlserver/" target="_blank"&gt;SQL Server&lt;/a&gt; 2008 numa máquina virtual &lt;a title="Microsoft Virtual PC" href="http://www.microsoft.com/windows/products/winfamily/virtualpc/default.mspx" target="_blank"&gt;Virtual PC&lt;/a&gt;, fiquei sem espaço no disco virtual.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;Pesquisei e encontrei esta ferramenta: &lt;a title="VHD Resizer" href="http://vmtoolkit.com/files/folders/converters/entry87.aspx" target="_blank"&gt;VHD Resizer&lt;/a&gt;. É necessário registo para descarregar a ferramenta.&lt;/p&gt;
&lt;p&gt;[Cross-Posted de &lt;a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/"&gt;http://www.arquitecturadesoftware.org/blogs/paulomorgado/&lt;/a&gt;]&lt;/p&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><a href="http://PauloMorgado.NET/"></a>  <p>Enquanto instalava o <a title="Microsoft SQL Server" href="http://www.microsoft.com/sqlserver/" target="_blank">SQL Server</a> 2008 numa máquina virtual <a title="Microsoft Virtual PC" href="http://www.microsoft.com/windows/products/winfamily/virtualpc/default.mspx" target="_blank">Virtual PC</a>, fiquei sem espaço no disco virtual.</p> <a href="http://PauloMorgado.NET/"></a>  <p>Pesquisei e encontrei esta ferramenta: <a title="VHD Resizer" href="http://vmtoolkit.com/files/folders/converters/entry87.aspx" target="_blank">VHD Resizer</a>. É necessário registo para descarregar a ferramenta.</p>
<p>[Cross-Posted de <a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/">http://www.arquitecturadesoftware.org/blogs/paulomorgado/</a>]</p></body></item><item><dc:creator>Paulo Morgado</dc:creator><title>J&amp;#225; Est&amp;#225; Dispon&amp;#237;vel: .NET 3.5 SP1, VS2008 SP1 And TFS2008 SP1</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28078.aspx</link><pubDate>Tue, 12 Aug 2008 01:25:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28078.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28078.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28078.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28078.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28078</trackback:ping><description>&lt;p&gt;&lt;a title="Microsoft .NET Framework 3.5 Service Pack 1" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=ab99342f-5d1a-413d-8319-81da479ab0d7" target="_blank"&gt;Microsoft .NET Framework 3.5 Service Pack 1&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="Microsoft Visual Studio 2008 Service Pack 1 (iso)" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=27673c47-b3b5-4c67-bd99-84e525b5ce61" target="_blank"&gt;Microsoft Visual Studio 2008 Service Pack 1 (iso)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="Visual Studio 2008 Team Foundation Server Service Pack 1" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9e40a5b6-da41-43a2-a06d-3cee196bfe3d" target="_blank"&gt;Visual Studio 2008 Team Foundation Server Service Pack 1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;[Cross-Posted de &lt;a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/"&gt;http://www.arquitecturadesoftware.org/blogs/paulomorgado/&lt;/a&gt;]&lt;/p&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p><a title="Microsoft .NET Framework 3.5 Service Pack 1" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=ab99342f-5d1a-413d-8319-81da479ab0d7" target="_blank">Microsoft .NET Framework 3.5 Service Pack 1</a></p>  <p><a title="Microsoft Visual Studio 2008 Service Pack 1 (iso)" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=27673c47-b3b5-4c67-bd99-84e525b5ce61" target="_blank">Microsoft Visual Studio 2008 Service Pack 1 (iso)</a></p>  <p><a title="Visual Studio 2008 Team Foundation Server Service Pack 1" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9e40a5b6-da41-43a2-a06d-3cee196bfe3d" target="_blank">Visual Studio 2008 Team Foundation Server Service Pack 1</a></p>
<p>[Cross-Posted de <a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/">http://www.arquitecturadesoftware.org/blogs/paulomorgado/</a>]</p></body></item><item><dc:creator>Paulo Morgado</dc:creator><title>Mais Acerca De Outro Modo De Usar A Palavra-Chave “using”</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28072.aspx</link><pubDate>Mon, 11 Aug 2008 02:02:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28072.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28072.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28072.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28072.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28072</trackback:ping><description>&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;No &lt;a title="Ainda outro modo de usar a palavra-chave &amp;quot;using&amp;quot;" href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2007/03/25/ainda-outro-modo-de-usar-a-palavra-chave-using.aspx" target="_blank"&gt;passado&lt;/a&gt; apresentei um outro possível uso para a palavra-chave &lt;a title="using (C# Reference)" href="http://msdn2.microsoft.com/library/124e1a63-2a4b-4132-b269-3b6d8d3ef72d.aspx"&gt;using&lt;/a&gt;: como dicas &lt;a title="Language-Integrated Query (LINQ)" href="http://msdn2.microsoft.com/library/bb397926.aspx" target="_blank"&gt;LINQ&lt;/a&gt;.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;Tenhno vindo a pensar mais neste assunto e refinei a minha proposta.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;pre&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt; q = &lt;font color="#0000ff"&gt;from&lt;/font&gt; person &lt;font color="#0000ff"&gt;in&lt;/font&gt; personCollection &lt;font color="#0000ff"&gt;using&lt;/font&gt; &lt;font color="#2b91af"&gt;MyEnumerableExtensions&lt;/font&gt;
        &lt;font color="#0000ff"&gt;group&lt;/font&gt; person &lt;font color="#0000ff"&gt;by&lt;/font&gt; person.LastName &lt;font color="#0000ff"&gt;into&lt;/font&gt; g &lt;font color="#0000ff"&gt;using new&lt;/font&gt; &lt;font color="#2b91af"&gt;MyOtherComparer&lt;/font&gt;()
        &lt;font color="#0000ff"&gt;orderby&lt;/font&gt; g.Key &lt;font color="#0000ff"&gt;using new&lt;/font&gt; &lt;font color="#2b91af"&gt;MyComparer&lt;/font&gt;()
        &lt;font color="#0000ff"&gt;select&lt;/font&gt; person;&lt;/pre&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p&gt;A consulta acima seria traduzida para:&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;pre&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt; q = &lt;font color="#2b91af"&gt;MyEnumerableExtensions&lt;/font&gt;.OrderBy&amp;lt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;, &lt;font color="#2b91af"&gt;Person&lt;/font&gt;&amp;gt;(
    &lt;font color="#2b91af"&gt;MyEnumerableExtensions&lt;/font&gt;.GroupBy&amp;lt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;, &lt;font color="#2b91af"&gt;Person&lt;/font&gt;&amp;gt;(
        personCollection,
        person =&amp;gt; person.LastName,
        &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#2b91af"&gt;MyComparer&lt;/font&gt;(),
    ),
    g =&amp;gt; g.Key,
    &lt;font color="#0000ff"&gt;mew&lt;/font&gt; &lt;font color="#2b91af"&gt;MyOtherComparer&lt;/font&gt;()
);&lt;/pre&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p&gt;O que acham disto?&lt;/p&gt;
&lt;p&gt;[Cross-Posted de &lt;a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/"&gt;http://www.arquitecturadesoftware.org/blogs/paulomorgado/&lt;/a&gt;]&lt;/p&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><a href="http://PauloMorgado.NET/"></a>  <p>No <a title="Ainda outro modo de usar a palavra-chave &quot;using&quot;" href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2007/03/25/ainda-outro-modo-de-usar-a-palavra-chave-using.aspx" target="_blank">passado</a> apresentei um outro possível uso para a palavra-chave <a title="using (C# Reference)" href="http://msdn2.microsoft.com/library/124e1a63-2a4b-4132-b269-3b6d8d3ef72d.aspx">using</a>: como dicas <a title="Language-Integrated Query (LINQ)" href="http://msdn2.microsoft.com/library/bb397926.aspx" target="_blank">LINQ</a>.</p> <a href="http://PauloMorgado.NET/"></a>  <p>Tenhno vindo a pensar mais neste assunto e refinei a minha proposta.</p> <a href="http://PauloMorgado.NET/"></a>  <pre><font color="#0000ff">var</font> q = <font color="#0000ff">from</font> person <font color="#0000ff">in</font> personCollection <font color="#0000ff">using</font> <font color="#2b91af">MyEnumerableExtensions</font>
        <font color="#0000ff">group</font> person <font color="#0000ff">by</font> person.LastName <font color="#0000ff">into</font> g <font color="#0000ff">using new</font> <font color="#2b91af">MyOtherComparer</font>()
        <font color="#0000ff">orderby</font> g.Key <font color="#0000ff">using new</font> <font color="#2b91af">MyComparer</font>()
        <font color="#0000ff">select</font> person;</pre>
<a href="http://PauloMorgado.NET/"></a>

<p>A consulta acima seria traduzida para:</p>
<a href="http://PauloMorgado.NET/"></a>

<pre><font color="#0000ff">var</font> q = <font color="#2b91af">MyEnumerableExtensions</font>.OrderBy&lt;<font color="#0000ff">string</font>, <font color="#2b91af">Person</font>&gt;(
    <font color="#2b91af">MyEnumerableExtensions</font>.GroupBy&lt;<font color="#0000ff">string</font>, <font color="#2b91af">Person</font>&gt;(
        personCollection,
        person =&gt; person.LastName,
        <font color="#0000ff">new</font> <font color="#2b91af">MyComparer</font>(),
    ),
    g =&gt; g.Key,
    <font color="#0000ff">mew</font> <font color="#2b91af">MyOtherComparer</font>()
);</pre>
<a href="http://PauloMorgado.NET/"></a>

<p>O que acham disto?</p>
<p>[Cross-Posted de <a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/">http://www.arquitecturadesoftware.org/blogs/paulomorgado/</a>]</p></body></item><item><dc:creator>Paulo Morgado</dc:creator><title>Que Tal Inicializa&amp;#231;&amp;#227;o De Propriedades E Adi&amp;#231;&amp;#227;o A Colec&amp;#231;&amp;#245;es Como A Inicializa&amp;#231;&amp;#227;o De Objectos E Colec&amp;#231;&amp;#245;es Em C#?</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28071.aspx</link><pubDate>Mon, 11 Aug 2008 00:37:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28071.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28071.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28071.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28071.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28071</trackback:ping><description>&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;O &lt;a title="Visual C# Developer Center" href="http://msdn.microsoft.com/vcsharp" target="_blank"&gt;C#&lt;/a&gt; 3.0 introduziu &lt;a title="Object and Collection Initializers (C# Programming Guide)" href="http://msdn.microsoft.com/library/c58f3db5-d7d4-4651-bd2d-5a3a97357f61.aspx" target="_blank"&gt;inicializadores de object and collection&lt;/a&gt;. É agora possível criar objectos e colecções pré-inicializados:&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;pre class="code"&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; person = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Person&lt;/span&gt; { FirstName = &lt;span style="color: #a31515"&gt;"Paulo"&lt;/span&gt;, LastName = &lt;span style="color: #a31515"&gt;"Morgado"&lt;/span&gt; };

&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; persons = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Person&lt;/span&gt;&amp;gt; {
    &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Person&lt;/span&gt; { FirstName = &lt;span style="color: #a31515"&gt;"Paulo"&lt;/span&gt;, LastName = &lt;span style="color: #a31515"&gt;"Morgado"&lt;/span&gt; },
    &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Person&lt;/span&gt; { FirstName = &lt;span style="color: #a31515"&gt;"Luís"&lt;/span&gt;, LastName = &lt;span style="color: #a31515"&gt;"Abreu"&lt;/span&gt; }
};

&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; personDirectory = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Dictionary&lt;/span&gt;&amp;lt;string, &lt;span style="color: #2b91af"&gt;Person&lt;/span&gt;&amp;gt; {
    { &lt;span style="color: #a31515"&gt;"Lisboa"&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Person&lt;/span&gt; { FirstName = &lt;span style="color: #a31515"&gt;"Paulo"&lt;/span&gt;, LastName = &lt;span style="color: #a31515"&gt;"Morgado"&lt;/span&gt; } },
    { &lt;span style="color: #a31515"&gt;"Funchal"&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Person&lt;/span&gt; { FirstName = &lt;span style="color: #a31515"&gt;"Luís"&lt;/span&gt;, LastName = "Abreu" } }
};&lt;/pre&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p&gt;Não era bom podermos fazer o mesmo para objectos e colecções já existentes?&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p&gt;Que sintaxe seria usada? Algo deste género?&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; person = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Person&lt;/span&gt;();
person = { FirstName = &lt;span style="color: #a31515"&gt;"Paulo"&lt;/span&gt;, LastName = &lt;span style="color: #a31515"&gt;"Morgado"&lt;/span&gt; };

&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; persons = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Person&lt;/span&gt;&amp;gt;();
persons += {
    &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Person&lt;/span&gt; { FirstName = &lt;span style="color: #a31515"&gt;"Paulo"&lt;/span&gt;, LastName = &lt;span style="color: #a31515"&gt;"Morgado"&lt;/span&gt; },
    &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Person&lt;/span&gt; { FirstName = &lt;span style="color: #a31515"&gt;"Luís"&lt;/span&gt;, LastName = &lt;span style="color: #a31515"&gt;"Abreu"&lt;/span&gt; }
};

&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; personDirectory = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Dictionary&lt;/span&gt;&amp;lt;string, &lt;span style="color: #2b91af"&gt;Person&lt;/span&gt;&amp;gt;();
personDirectory += {
    { &lt;span style="color: #a31515"&gt;"Lisboa"&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Person&lt;/span&gt; { FirstName = &lt;span style="color: #a31515"&gt;"Paulo"&lt;/span&gt;, LastName = &lt;span style="color: #a31515"&gt;"Morgado"&lt;/span&gt; } },
    { &lt;span style="color: #a31515"&gt;"Funchal"&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Person&lt;/span&gt; { FirstName = &lt;span style="color: #a31515"&gt;"Luís"&lt;/span&gt;, LastName = "Abreu" } }
};&lt;/pre&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p&gt;O que pensam disto?&lt;/p&gt;
&lt;p&gt;[Cross-Posted de &lt;a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/"&gt;http://www.arquitecturadesoftware.org/blogs/paulomorgado/&lt;/a&gt;]&lt;/p&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><a href="http://PauloMorgado.NET/"></a>  <p>O <a title="Visual C# Developer Center" href="http://msdn.microsoft.com/vcsharp" target="_blank">C#</a> 3.0 introduziu <a title="Object and Collection Initializers (C# Programming Guide)" href="http://msdn.microsoft.com/library/c58f3db5-d7d4-4651-bd2d-5a3a97357f61.aspx" target="_blank">inicializadores de object and collection</a>. É agora possível criar objectos e colecções pré-inicializados:</p> <a href="http://PauloMorgado.NET/"></a>  <pre class="code"><span style="color: #0000ff">var</span> person = <span style="color: #0000ff">new</span> <span style="color: #2b91af">Person</span> { FirstName = <span style="color: #a31515">"Paulo"</span>, LastName = <span style="color: #a31515">"Morgado"</span> };

<span style="color: #0000ff">var</span> persons = <span style="color: #0000ff">new</span> <span style="color: #2b91af">List</span>&lt;<span style="color: #2b91af">Person</span>&gt; {
    <span style="color: #0000ff">new</span> <span style="color: #2b91af">Person</span> { FirstName = <span style="color: #a31515">"Paulo"</span>, LastName = <span style="color: #a31515">"Morgado"</span> },
    <span style="color: #0000ff">new</span> <span style="color: #2b91af">Person</span> { FirstName = <span style="color: #a31515">"Luís"</span>, LastName = <span style="color: #a31515">"Abreu"</span> }
};

<span style="color: #0000ff">var</span> personDirectory = <span style="color: #0000ff">new</span> <span style="color: #2b91af">Dictionary</span>&lt;string, <span style="color: #2b91af">Person</span>&gt; {
    { <span style="color: #a31515">"Lisboa"</span>, <span style="color: #0000ff">new</span> <span style="color: #2b91af">Person</span> { FirstName = <span style="color: #a31515">"Paulo"</span>, LastName = <span style="color: #a31515">"Morgado"</span> } },
    { <span style="color: #a31515">"Funchal"</span>, <span style="color: #0000ff">new</span> <span style="color: #2b91af">Person</span> { FirstName = <span style="color: #a31515">"Luís"</span>, LastName = "Abreu" } }
};</pre>
<a href="http://PauloMorgado.NET/"></a>

<p>Não era bom podermos fazer o mesmo para objectos e colecções já existentes?</p>
<a href="http://PauloMorgado.NET/"></a>

<p>Que sintaxe seria usada? Algo deste género?</p>
<a href="http://PauloMorgado.NET/"></a>

<pre class="code"><span style="color: #0000ff">var</span> person = <span style="color: #0000ff">new</span> <span style="color: #2b91af">Person</span>();
person = { FirstName = <span style="color: #a31515">"Paulo"</span>, LastName = <span style="color: #a31515">"Morgado"</span> };

<span style="color: #0000ff">var</span> persons = <span style="color: #0000ff">new</span> <span style="color: #2b91af">List</span>&lt;<span style="color: #2b91af">Person</span>&gt;();
persons += {
    <span style="color: #0000ff">new</span> <span style="color: #2b91af">Person</span> { FirstName = <span style="color: #a31515">"Paulo"</span>, LastName = <span style="color: #a31515">"Morgado"</span> },
    <span style="color: #0000ff">new</span> <span style="color: #2b91af">Person</span> { FirstName = <span style="color: #a31515">"Luís"</span>, LastName = <span style="color: #a31515">"Abreu"</span> }
};

<span style="color: #0000ff">var</span> personDirectory = <span style="color: #0000ff">new</span> <span style="color: #2b91af">Dictionary</span>&lt;string, <span style="color: #2b91af">Person</span>&gt;();
personDirectory += {
    { <span style="color: #a31515">"Lisboa"</span>, <span style="color: #0000ff">new</span> <span style="color: #2b91af">Person</span> { FirstName = <span style="color: #a31515">"Paulo"</span>, LastName = <span style="color: #a31515">"Morgado"</span> } },
    { <span style="color: #a31515">"Funchal"</span>, <span style="color: #0000ff">new</span> <span style="color: #2b91af">Person</span> { FirstName = <span style="color: #a31515">"Luís"</span>, LastName = "Abreu" } }
};</pre>
<a href="http://PauloMorgado.NET/"></a>

<p>O que pensam disto?</p>
<p>[Cross-Posted de <a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/">http://www.arquitecturadesoftware.org/blogs/paulomorgado/</a>]</p></body></item><item><dc:creator>Paulo Morgado</dc:creator><title>Visual Studio 2008 Service Pack 1 Esperado Para A Pr&amp;#243;xima Semana</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28066.aspx</link><pubDate>Fri, 08 Aug 2008 01:29:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28066.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28066.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28066.aspx#feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28066.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28066</trackback:ping><description>&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;De acordo com a &lt;a title="MSDN Subscriptions home page" href="http://msdn.microsoft.com/subscriptions/default.aspx" target="_blank"&gt;página inicial das MSDN Subscriptions&lt;/a&gt;, devemos esperar que o Service Pack 1 do &lt;a title="Microsoft Visual Studio 2008" href="http://msdn.microsoft.com/vstudio/" target="_blank"&gt;Visual Studio 2008&lt;/a&gt; esteja disponível após o próximo dia 11 de Agosto de 2008.&lt;/p&gt;
&lt;p&gt;[Cross-Posted de &lt;a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/"&gt;http://www.arquitecturadesoftware.org/blogs/paulomorgado/&lt;/a&gt;]&lt;/p&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><a href="http://PauloMorgado.NET/"></a>  <p>De acordo com a <a title="MSDN Subscriptions home page" href="http://msdn.microsoft.com/subscriptions/default.aspx" target="_blank">página inicial das MSDN Subscriptions</a>, devemos esperar que o Service Pack 1 do <a title="Microsoft Visual Studio 2008" href="http://msdn.microsoft.com/vstudio/" target="_blank">Visual Studio 2008</a> esteja disponível após o próximo dia 11 de Agosto de 2008.</p>
<p>[Cross-Posted de <a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/">http://www.arquitecturadesoftware.org/blogs/paulomorgado/</a>]</p></body></item><item><dc:creator>Paulo Morgado</dc:creator><title>Microsoft Lan&amp;#231;a SQL Server 2008</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28057.aspx</link><pubDate>Wed, 06 Aug 2008 23:52:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28057.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28057.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28057.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28057.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28057</trackback:ping><description>&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;
&lt;p align="center"&gt;&lt;a title="SQL Server 2008" href="http://www.microsoft.com/sqlserver/" target="_blank"&gt;&lt;img src="http://www.microsoft.com/global/sqlserver/2008/en/us/PublishingImages/diag-sql2008-lg.gif" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;
&lt;p align="justify"&gt;Finalmente está aí o &lt;a title="Microsoft SQL Server" href="http://www.microsoft.com/sqlserver/" target="_blank"&gt;SQL Server 2008&lt;/a&gt; e vem com a &lt;a title="The ADO.NET Entity Framework Overview" href="http://msdn.microsoft.com/library/aa697427.aspx" target="_blank"&gt;Entity Framework&lt;/a&gt;, o que quer dizer que o SP1 para o &lt;a title="Microsoft Visual Studio" href="http://msdn.microsoft.com/vstudio/" target="_blank"&gt;Visual Studio 2008&lt;/a&gt; e a &lt;a title=".NET Framework Developer Center" href="http://msdn.microsoft.com/netframework/" target="_blank"&gt;.NET Framework&lt;/a&gt; também deve estar a saír.&lt;/p&gt;
&lt;p&gt;[Cross-Posted de &lt;a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/"&gt;http://www.arquitecturadesoftware.org/blogs/paulomorgado/&lt;/a&gt;]&lt;/p&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><a href="http://PauloMorgado.NET/"></a>
<p align="center"><a title="SQL Server 2008" href="http://www.microsoft.com/sqlserver/" target="_blank"><img src="http://www.microsoft.com/global/sqlserver/2008/en/us/PublishingImages/diag-sql2008-lg.gif" /></a></p><a href="http://PauloMorgado.NET/"></a>
<p align="justify">Finalmente está aí o <a title="Microsoft SQL Server" href="http://www.microsoft.com/sqlserver/" target="_blank">SQL Server 2008</a> e vem com a <a title="The ADO.NET Entity Framework Overview" href="http://msdn.microsoft.com/library/aa697427.aspx" target="_blank">Entity Framework</a>, o que quer dizer que o SP1 para o <a title="Microsoft Visual Studio" href="http://msdn.microsoft.com/vstudio/" target="_blank">Visual Studio 2008</a> e a <a title=".NET Framework Developer Center" href="http://msdn.microsoft.com/netframework/" target="_blank">.NET Framework</a> também deve estar a saír.</p>
<p>[Cross-Posted de <a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/">http://www.arquitecturadesoftware.org/blogs/paulomorgado/</a>]</p></body></item><item><dc:creator>Paulo Morgado</dc:creator><title>Armazenamento Em Mem&amp;#243;ria De Estado De Sess&amp;#227;o ASP.NET Seriado</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28052.aspx</link><pubDate>Mon, 04 Aug 2008 02:29:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28052.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28052.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28052.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28052.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28052</trackback:ping><description>&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;O &lt;a title="ASP.NET Developer Center" href="http://msdn.microsoft.com/asp.net/" target="_blank"&gt;ASP.NET&lt;/a&gt; disponibiliza três tipos de armazenamento de estado de sessao:&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;table style="padding-right: 10px; padding-left: 10px; margin-left: 10px; width: 100%; margin-right: 10px" cellspacing="0" cellpadding="2" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;th valign="top" width="100"&gt;Provider &lt;/th&gt;        &lt;th valign="top"&gt;Description &lt;/th&gt;&lt;/tr&gt;        &lt;/tbody&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;&lt;strong&gt;InProc&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top"&gt;         &lt;p align="justify"&gt;O estado de sessão é armazenado no &lt;em&gt;cache&lt;/em&gt; ASP.NET.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;&lt;strong&gt;SQLServer&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top"&gt;         &lt;p align="justify"&gt;O estado de sessão é armazenado numa base de dados SQL Server.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;&lt;strong&gt;StateServer&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top"&gt;         &lt;p align="justify"&gt;O estado de sessão é armazenado é armazenado num serviço de armazenamento de estado.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;Porque com o &lt;strong&gt;SQLServer&lt;/strong&gt; e o &lt;strong&gt;StateServer&lt;/strong&gt; o estado tem de atravessar a fronteira do &lt;a title="AppDomain Class" href="http://msdn.microsoft.com/library/system.appdomain.aspx" target="_blank"&gt;AppDomain&lt;/a&gt;, tem de ser seriado antes de ser armazenado e desseriado quando carregado. Porque o estado tem de ser carregado e armazenado em cada pedido, só está disponível desde o evento &lt;a title="HttpApplication.ReleaseRequestState Event" href="http://msdn.microsoft.com/library/System.Web.HttpApplication.PostAcquireRequestState.aspx" target="_blank"&gt;PostAcquireRequestState&lt;/a&gt; até ao evento &lt;a title="HttpApplication.ReleaseRequestState Event" href="http://msdn.microsoft.com/library/System.Web.HttpApplication.ReleaseRequestState.aspx" target="_blank"&gt;ReleaseRequestState&lt;/a&gt;. E, devido à seriação e desseriação, todos os objectos armazenados têm de ser seriáveis e qualquer referência mantida para um item do estado não será para o mesmo item após a desseriação do estado.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;Por outro lado, com o &lt;strong&gt;InProc&lt;/strong&gt;, o estado nunca será seriado ou desseriado, o que quer dizer que os objectos não necessitam de ser seriáveis e qualquer referência para um item do estado será sempre uma referência para um item do estado mesmo antes do evento &lt;a title="HttpApplication.ReleaseRequestState Event" href="http://msdn.microsoft.com/library/System.Web.HttpApplication.PostAcquireRequestState.aspx" target="_blank"&gt;PostAcquireRequestState&lt;/a&gt; e após o evento &lt;a title="HttpApplication.ReleaseRequestState Event" href="http://msdn.microsoft.com/library/System.Web.HttpApplication.ReleaseRequestState.aspx" target="_blank"&gt;ReleaseRequestState&lt;/a&gt;.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;Na prática, durante o desenvolvimento é usado o &lt;strong&gt;InProc&lt;/strong&gt; e em produção é usado o &lt;strong&gt;SQLServer&lt;/strong&gt;. Isto leva, muitas vezes, a erros aplicacionais que apenas se manifestam em ambiente de produção, com armazenar objectos não seriáveis no estado. Foi por isso que escrevi um provedor de armazenamento de estado em memória que seria e desseria os itens armazenados. Podem obter o código fonte &lt;a title="ized In-Process ASP.NET Session State Store" href="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=PauloMorgado&amp;amp;DownloadId=2717" target="_blank"&gt;aqui&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;[Cross-Posted de &lt;a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/"&gt;http://www.arquitecturadesoftware.org/blogs/paulomorgado/&lt;/a&gt;]&lt;/p&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><a href="http://PauloMorgado.NET/"></a>  <p align="justify">O <a title="ASP.NET Developer Center" href="http://msdn.microsoft.com/asp.net/" target="_blank">ASP.NET</a> disponibiliza três tipos de armazenamento de estado de sessao:</p> <a href="http://PauloMorgado.NET/"></a>  <table style="padding-right: 10px; padding-left: 10px; margin-left: 10px; width: 100%; margin-right: 10px" cellspacing="0" cellpadding="2" border="1"><tbody>     <tr>       <th valign="top" width="100">Provider </th>        <th valign="top">Description </th></tr>        </tbody><tbody>     <tr>       <td valign="top"><strong>InProc</strong></td>        <td valign="top">         <p align="justify">O estado de sessão é armazenado no <em>cache</em> ASP.NET.</p>       </td>     </tr>      <tr>       <td valign="top"><strong>SQLServer</strong></td>        <td valign="top">         <p align="justify">O estado de sessão é armazenado numa base de dados SQL Server.</p>       </td>     </tr>      <tr>       <td valign="top"><strong>StateServer</strong></td>        <td valign="top">         <p align="justify">O estado de sessão é armazenado é armazenado num serviço de armazenamento de estado.</p>       </td>     </tr>   </tbody></table> <a href="http://PauloMorgado.NET/"></a>  <p align="justify">Porque com o <strong>SQLServer</strong> e o <strong>StateServer</strong> o estado tem de atravessar a fronteira do <a title="AppDomain Class" href="http://msdn.microsoft.com/library/system.appdomain.aspx" target="_blank">AppDomain</a>, tem de ser seriado antes de ser armazenado e desseriado quando carregado. Porque o estado tem de ser carregado e armazenado em cada pedido, só está disponível desde o evento <a title="HttpApplication.ReleaseRequestState Event" href="http://msdn.microsoft.com/library/System.Web.HttpApplication.PostAcquireRequestState.aspx" target="_blank">PostAcquireRequestState</a> até ao evento <a title="HttpApplication.ReleaseRequestState Event" href="http://msdn.microsoft.com/library/System.Web.HttpApplication.ReleaseRequestState.aspx" target="_blank">ReleaseRequestState</a>. E, devido à seriação e desseriação, todos os objectos armazenados têm de ser seriáveis e qualquer referência mantida para um item do estado não será para o mesmo item após a desseriação do estado.</p> <a href="http://PauloMorgado.NET/"></a>  <p align="justify">Por outro lado, com o <strong>InProc</strong>, o estado nunca será seriado ou desseriado, o que quer dizer que os objectos não necessitam de ser seriáveis e qualquer referência para um item do estado será sempre uma referência para um item do estado mesmo antes do evento <a title="HttpApplication.ReleaseRequestState Event" href="http://msdn.microsoft.com/library/System.Web.HttpApplication.PostAcquireRequestState.aspx" target="_blank">PostAcquireRequestState</a> e após o evento <a title="HttpApplication.ReleaseRequestState Event" href="http://msdn.microsoft.com/library/System.Web.HttpApplication.ReleaseRequestState.aspx" target="_blank">ReleaseRequestState</a>.</p> <a href="http://PauloMorgado.NET/"></a>  <p align="justify">Na prática, durante o desenvolvimento é usado o <strong>InProc</strong> e em produção é usado o <strong>SQLServer</strong>. Isto leva, muitas vezes, a erros aplicacionais que apenas se manifestam em ambiente de produção, com armazenar objectos não seriáveis no estado. Foi por isso que escrevi um provedor de armazenamento de estado em memória que seria e desseria os itens armazenados. Podem obter o código fonte <a title="ized In-Process ASP.NET Session State Store" href="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=PauloMorgado&amp;DownloadId=2717" target="_blank">aqui</a>.</p>
<p>[Cross-Posted de <a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/">http://www.arquitecturadesoftware.org/blogs/paulomorgado/</a>]</p></body></item><item><dc:creator>Paulo Morgado</dc:creator><title>C# E Visual Basic Geram &amp;#193;rvores De Express&amp;#245;es Diferentes</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28051.aspx</link><pubDate>Mon, 04 Aug 2008 01:35:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28051.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28051.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28051.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28051.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28051</trackback:ping><description>&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;(Isto foi-me referido pelo &lt;a title="Frans Bouma's blog" href="http://weblogs.asp.net/fbouma/" target="_blank"&gt;Frans Bouma&lt;/a&gt; e explicado pelo &lt;a title="Jon Skeet's Coding Blog" href="http://msmvps.com/blogs/jon.skeet/" target="_blank"&gt;Jon Skeet&lt;/a&gt;)&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p&gt;Imaginem este conjunto de classes:&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;A
&lt;/span&gt;{
    &lt;span style="color: blue"&gt;public virtual string &lt;/span&gt;P
    {
        &lt;span style="color: blue"&gt;get &lt;/span&gt;{ &lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #a31515"&gt;"A"&lt;/span&gt;; }
    }
}

&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;&lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;B &lt;/span&gt;: &lt;span style="color: #2b91af"&gt;A
&lt;/span&gt;{
}

&lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;C &lt;/span&gt;: &lt;span style="color: #2b91af"&gt;B
&lt;/span&gt;{
    &lt;span style="color: blue"&gt;public override string &lt;/span&gt;P
    {
        &lt;span style="color: blue"&gt;get &lt;/span&gt;{ &lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #a31515"&gt;"C"&lt;/span&gt;; }
    }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p&gt;E esta classe:&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public static class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Reporter
&lt;/span&gt;{
    &lt;span style="color: blue"&gt;public static void &lt;/span&gt;Report&amp;lt;T&amp;gt;(T target, &lt;span style="color: #2b91af"&gt;Expression&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Func&lt;/span&gt;&amp;lt;T, &lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;&amp;gt; expression)
    {
        &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"Expression: {0}"&lt;/span&gt;, expression);
        &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"\tDeclaring Type: {0}"&lt;/span&gt;, ((expression &lt;span style="color: blue"&gt;as &lt;/span&gt;&lt;span style="color: #2b91af"&gt;LambdaExpression&lt;/span&gt;).Body &lt;span style="color: blue"&gt;as &lt;/span&gt;&lt;span style="color: #2b91af"&gt;MemberExpression&lt;/span&gt;).Member.DeclaringType);
        &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"\tInvocation Result: {0} for {1}"&lt;/span&gt;, expression.Compile().Invoke(target), target.GetType());
        &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine();
    }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p&gt;A classe acima escreve na consola a expressão Lambda, o tipo que declara a propriedade e o valor da propridedade para &lt;strong&gt;target&lt;/strong&gt; e o tipo de &lt;strong&gt;target&lt;/strong&gt;.&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p&gt;Vejamos o que acontece quando é usado o seguinte código &lt;strong&gt;C#&lt;/strong&gt;:&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;&lt;span style="color: #2b91af"&gt;Reporter&lt;/span&gt;.Report(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;C&lt;/span&gt;(), (&lt;span style="color: #2b91af"&gt;A &lt;/span&gt;a) =&amp;gt; a.P);
&lt;span style="color: #2b91af"&gt;Reporter&lt;/span&gt;.Report(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;C&lt;/span&gt;(), (&lt;span style="color: #2b91af"&gt;B &lt;/span&gt;b) =&amp;gt; b.P);
&lt;span style="color: #2b91af"&gt;Reporter&lt;/span&gt;.Report(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;C&lt;/span&gt;(), (&lt;span style="color: #2b91af"&gt;C &lt;/span&gt;c) =&amp;gt; c.P);

&lt;span style="color: #2b91af"&gt;Reporter&lt;/span&gt;.Report(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;B&lt;/span&gt;(), (&lt;span style="color: #2b91af"&gt;A &lt;/span&gt;a) =&amp;gt; a.P);
&lt;span style="color: #2b91af"&gt;Reporter&lt;/span&gt;.Report(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;B&lt;/span&gt;(), (&lt;span style="color: #2b91af"&gt;B &lt;/span&gt;b) =&amp;gt; b.P);

&lt;span style="color: #2b91af"&gt;Reporter&lt;/span&gt;.Report(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;A&lt;/span&gt;(), (&lt;span style="color: #2b91af"&gt;A &lt;/span&gt;a) =&amp;gt; a.P);&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p&gt;O resultado será:&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;Expression: a =&amp;gt; a.P
        Declaring Type: A
        Invocation Result: C for C

Expression: b =&amp;gt; b.P
        Declaring Type: A
        Invocation Result: C for C

Expression: c =&amp;gt; c.P
        Declaring Type: A
        Invocation Result: C for C

Expression: a =&amp;gt; a.P
        Declaring Type: A
        Invocation Result: A for B

Expression: b =&amp;gt; b.P
        Declaring Type: A
        Invocation Result: A for B

Expression: a =&amp;gt; a.P
        Declaring Type: A
        Invocation Result: A for A&lt;/pre&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p&gt;Por outro lado, se for usado o seguinte código &lt;strong&gt;Visual Basic&lt;/strong&gt;:&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;Reporter.Report(&lt;span style="color: blue"&gt;New &lt;/span&gt;C(), &lt;span style="color: blue"&gt;Function&lt;/span&gt;(a &lt;span style="color: blue"&gt;As &lt;/span&gt;A) a.P)
Reporter.Report(&lt;span style="color: blue"&gt;New &lt;/span&gt;C(), &lt;span style="color: blue"&gt;Function&lt;/span&gt;(b &lt;span style="color: blue"&gt;As &lt;/span&gt;B) b.P)
Reporter.Report(&lt;span style="color: blue"&gt;New &lt;/span&gt;C(), &lt;span style="color: blue"&gt;Function&lt;/span&gt;(c &lt;span style="color: blue"&gt;As &lt;/span&gt;C) c.P)

Reporter.Report(&lt;span style="color: blue"&gt;New &lt;/span&gt;B(), &lt;span style="color: blue"&gt;Function&lt;/span&gt;(a &lt;span style="color: blue"&gt;As &lt;/span&gt;A) a.P)
Reporter.Report(&lt;span style="color: blue"&gt;New &lt;/span&gt;B(), &lt;span style="color: blue"&gt;Function&lt;/span&gt;(b &lt;span style="color: blue"&gt;As &lt;/span&gt;B) b.P)

Reporter.Report(&lt;span style="color: blue"&gt;New &lt;/span&gt;A(), &lt;span style="color: blue"&gt;Function&lt;/span&gt;(a &lt;span style="color: blue"&gt;As &lt;/span&gt;A) a.P)&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p&gt;O resultado será:&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;Expression: a =&amp;gt; a.P
        Declaring Type: A
        Invocation Result: C for C

Expression: b =&amp;gt; b.P
        Declaring Type: A
        Invocation Result: C for C

Expression: c =&amp;gt; c.P
        Declaring Type: C
        Invocation Result: C for C

Expression: a =&amp;gt; a.P
        Declaring Type: A
        Invocation Result: A for B

Expression: b =&amp;gt; b.P
        Declaring Type: A
        Invocation Result: A for B

Expression: a =&amp;gt; a.P
        Declaring Type: A
        Invocation Result: A for A&lt;/pre&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p&gt;Porquê as diferenças? Por causa das diferenças nas especificações e compiladores das diferentes inguagens:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;O compilador de &lt;strong&gt;C#&lt;/strong&gt; gerará uma chamada virtual ao membro virtual na classe em que é declarado como virtual. &lt;/li&gt;

  &lt;li&gt;O compilador de &lt;strong&gt;Visual Basic&lt;/strong&gt; gerará uma chamada virtual ao membro sobreposto na classe em que é implementado. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[Cross-Posted de &lt;a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/"&gt;http://www.arquitecturadesoftware.org/blogs/paulomorgado/&lt;/a&gt;]&lt;/p&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><a href="http://PauloMorgado.NET/"></a>  <p>(Isto foi-me referido pelo <a title="Frans Bouma's blog" href="http://weblogs.asp.net/fbouma/" target="_blank">Frans Bouma</a> e explicado pelo <a title="Jon Skeet's Coding Blog" href="http://msmvps.com/blogs/jon.skeet/" target="_blank">Jon Skeet</a>)</p> <a href="http://PauloMorgado.NET/"></a>  <p>Imaginem este conjunto de classes:</p> <a href="http://PauloMorgado.NET/"></a>  <pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">A
</span>{
    <span style="color: blue">public virtual string </span>P
    {
        <span style="color: blue">get </span>{ <span style="color: blue">return </span><span style="color: #a31515">"A"</span>; }
    }
}

<a href="http://PauloMorgado.NET/"></a><span style="color: blue">public class </span><span style="color: #2b91af">B </span>: <span style="color: #2b91af">A
</span>{
}

<span style="color: blue">public class </span><span style="color: #2b91af">C </span>: <span style="color: #2b91af">B
</span>{
    <span style="color: blue">public override string </span>P
    {
        <span style="color: blue">get </span>{ <span style="color: blue">return </span><span style="color: #a31515">"C"</span>; }
    }
}</pre>
<a href="http://11011.net/software/vspaste"></a><a href="http://PauloMorgado.NET/"></a>

<p>E esta classe:</p>
<a href="http://PauloMorgado.NET/"></a>

<pre class="code"><span style="color: blue">public static class </span><span style="color: #2b91af">Reporter
</span>{
    <span style="color: blue">public static void </span>Report&lt;T&gt;(T target, <span style="color: #2b91af">Expression</span>&lt;<span style="color: #2b91af">Func</span>&lt;T, <span style="color: blue">string</span>&gt;&gt; expression)
    {
        <span style="color: #2b91af">Console</span>.WriteLine(<span style="color: #a31515">"Expression: {0}"</span>, expression);
        <span style="color: #2b91af">Console</span>.WriteLine(<span style="color: #a31515">"\tDeclaring Type: {0}"</span>, ((expression <span style="color: blue">as </span><span style="color: #2b91af">LambdaExpression</span>).Body <span style="color: blue">as </span><span style="color: #2b91af">MemberExpression</span>).Member.DeclaringType);
        <span style="color: #2b91af">Console</span>.WriteLine(<span style="color: #a31515">"\tInvocation Result: {0} for {1}"</span>, expression.Compile().Invoke(target), target.GetType());
        <span style="color: #2b91af">Console</span>.WriteLine();
    }
}</pre>
<a href="http://11011.net/software/vspaste"></a><a href="http://PauloMorgado.NET/"></a>

<p>A classe acima escreve na consola a expressão Lambda, o tipo que declara a propriedade e o valor da propridedade para <strong>target</strong> e o tipo de <strong>target</strong>.</p>
<a href="http://PauloMorgado.NET/"></a>

<p>Vejamos o que acontece quando é usado o seguinte código <strong>C#</strong>:</p>
<a href="http://PauloMorgado.NET/"></a>

<pre class="code"><span style="color: #2b91af">Reporter</span>.Report(<span style="color: blue">new </span><span style="color: #2b91af">C</span>(), (<span style="color: #2b91af">A </span>a) =&gt; a.P);
<span style="color: #2b91af">Reporter</span>.Report(<span style="color: blue">new </span><span style="color: #2b91af">C</span>(), (<span style="color: #2b91af">B </span>b) =&gt; b.P);
<span style="color: #2b91af">Reporter</span>.Report(<span style="color: blue">new </span><span style="color: #2b91af">C</span>(), (<span style="color: #2b91af">C </span>c) =&gt; c.P);

<span style="color: #2b91af">Reporter</span>.Report(<span style="color: blue">new </span><span style="color: #2b91af">B</span>(), (<span style="color: #2b91af">A </span>a) =&gt; a.P);
<span style="color: #2b91af">Reporter</span>.Report(<span style="color: blue">new </span><span style="color: #2b91af">B</span>(), (<span style="color: #2b91af">B </span>b) =&gt; b.P);

<span style="color: #2b91af">Reporter</span>.Report(<span style="color: blue">new </span><span style="color: #2b91af">A</span>(), (<span style="color: #2b91af">A </span>a) =&gt; a.P);</pre>
<a href="http://11011.net/software/vspaste"></a><a href="http://PauloMorgado.NET/"></a>

<p>O resultado será:</p>
<a href="http://PauloMorgado.NET/"></a>

<pre class="code">Expression: a =&gt; a.P
        Declaring Type: A
        Invocation Result: C for C

Expression: b =&gt; b.P
        Declaring Type: A
        Invocation Result: C for C

Expression: c =&gt; c.P
        Declaring Type: A
        Invocation Result: C for C

Expression: a =&gt; a.P
        Declaring Type: A
        Invocation Result: A for B

Expression: b =&gt; b.P
        Declaring Type: A
        Invocation Result: A for B

Expression: a =&gt; a.P
        Declaring Type: A
        Invocation Result: A for A</pre>
<a href="http://PauloMorgado.NET/"></a>

<p>Por outro lado, se for usado o seguinte código <strong>Visual Basic</strong>:</p>
<a href="http://PauloMorgado.NET/"></a>

<pre class="code">Reporter.Report(<span style="color: blue">New </span>C(), <span style="color: blue">Function</span>(a <span style="color: blue">As </span>A) a.P)
Reporter.Report(<span style="color: blue">New </span>C(), <span style="color: blue">Function</span>(b <span style="color: blue">As </span>B) b.P)
Reporter.Report(<span style="color: blue">New </span>C(), <span style="color: blue">Function</span>(c <span style="color: blue">As </span>C) c.P)

Reporter.Report(<span style="color: blue">New </span>B(), <span style="color: blue">Function</span>(a <span style="color: blue">As </span>A) a.P)
Reporter.Report(<span style="color: blue">New </span>B(), <span style="color: blue">Function</span>(b <span style="color: blue">As </span>B) b.P)

Reporter.Report(<span style="color: blue">New </span>A(), <span style="color: blue">Function</span>(a <span style="color: blue">As </span>A) a.P)</pre>
<a href="http://11011.net/software/vspaste"></a><a href="http://PauloMorgado.NET/"></a>

<p>O resultado será:</p>
<a href="http://PauloMorgado.NET/"></a>

<pre class="code">Expression: a =&gt; a.P
        Declaring Type: A
        Invocation Result: C for C

Expression: b =&gt; b.P
        Declaring Type: A
        Invocation Result: C for C

Expression: c =&gt; c.P
        Declaring Type: C
        Invocation Result: C for C

Expression: a =&gt; a.P
        Declaring Type: A
        Invocation Result: A for B

Expression: b =&gt; b.P
        Declaring Type: A
        Invocation Result: A for B

Expression: a =&gt; a.P
        Declaring Type: A
        Invocation Result: A for A</pre>
<a href="http://PauloMorgado.NET/"></a>

<p>Porquê as diferenças? Por causa das diferenças nas especificações e compiladores das diferentes inguagens:</p>

<ul>
  <li>O compilador de <strong>C#</strong> gerará uma chamada virtual ao membro virtual na classe em que é declarado como virtual. </li>

  <li>O compilador de <strong>Visual Basic</strong> gerará uma chamada virtual ao membro sobreposto na classe em que é implementado. </li>
</ul>
<p>[Cross-Posted de <a href="http://www.arquitecturadesoftware.org/blogs/paulomorgado/">http://www.arquitecturadesoftware.org/blogs/paulomorgado/</a>]</p></body></item><item><dc:creator>Paulo Morgado</dc:creator><title>IIS/ASP.NET Cookieless Support Not Working As Expected</title><link>http://weblogs.pontonetpt.com/pjmorgado/posts/28017.aspx</link><pubDate>Fri, 01 Aug 2008 02:17:00 GMT</pubDate><guid>http://weblogs.pontonetpt.com/pjmorgado/posts/28017.aspx</guid><wfw:comment>http://weblogs.pontonetpt.com/pjmorgado/comments/28017.aspx</wfw:comment><comments>http://weblogs.pontonetpt.com/pjmorgado/posts/28017.aspx#feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.pontonetpt.com/pjmorgado/comments/commentRss/28017.aspx</wfw:commentRss><trackback:ping>http://weblogs.pontonetpt.com/pjmorgado/trackback.aspx?ID=28017</trackback:ping><description>&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;Num dos ambientes em que trabalho não podem ser utilizados &lt;em&gt;cookies&lt;/em&gt; porque as páginas correm em controlos &lt;em&gt;web browser&lt;/em&gt; hospedados numa aplicação cliente e os &lt;em&gt;cookies&lt;/em&gt; acabam por ser partilhados entre todos os &lt;em&gt;browsers&lt;/em&gt;.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;Felizmente, o &lt;a title="ASP.NET Developer Center" href="http://msdn.microsoft.com/asp.net/" target="_blank"&gt;ASP.NET&lt;/a&gt; permite-nos persistir alguns &lt;em&gt;cookies&lt;/em&gt; como parte do URL.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;Para persistir o &lt;em&gt;cookie&lt;/em&gt; do identificador do estado de sessão no URL basta adicionar a seguinte configuração:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;configuration&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;system.web&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;sessionState &lt;/span&gt;&lt;span style="color: red"&gt;cookieless&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;UseUri&lt;/span&gt;" &lt;span style="color: blue"&gt;/&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;system.web&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;configuration&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;e obtemos URLs destes:&lt;/p&gt;

&lt;p style="margin-left: 10px; font-family: consolas, courier new, monospace"&gt;http://localhost/Cookieless/(S(jcmwek3ja0lvdpbwoacpjirv))/default.aspx&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;O modo como o &lt;a title="IIS.net : The Official Microsoft IIS Site" href="http://www.iis.net/" target="_blank"&gt;IIS&lt;/a&gt; e o ASP.NET fazem isto é através da remoção da secção entre parentesis por parte do IIS e a adição do valor removido como um &lt;em&gt;header&lt;/em&gt; HTTP de nome &lt;strong&gt;AspFilterSessionId&lt;/strong&gt; ao pedido. Em seguinda, o ASP.NET extrai o cookie desse &lt;em&gt;header&lt;/em&gt; HTTP.&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;Fiz esta página simples para demonstrar o funcionamente desta funcionalidade:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue"&gt;@ &lt;/span&gt;&lt;span style="color: #a31515"&gt;Page &lt;/span&gt;&lt;span style="color: red"&gt;Language&lt;/span&gt;&lt;span style="color: blue"&gt;="C#" &lt;/span&gt;&lt;span style="color: red"&gt;AutoEventWireup&lt;/span&gt;&lt;span style="color: blue"&gt;="true" &lt;/span&gt;&lt;span style="background: #ffee62"&gt;%&amp;gt;

&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #a31515"&gt;DOCTYPE &lt;/span&gt;&lt;span style="color: red"&gt;html PUBLIC &lt;/span&gt;&lt;span style="color: blue"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;html &lt;/span&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;="http://www.w3.org/1999/xhtml"&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;head &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;="Head1" &lt;/span&gt;&lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;head&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;body&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;form &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;="form1" &lt;/span&gt;&lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;table&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Raw URL&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue"&gt;= &lt;/span&gt;Request.RawUrl &lt;span style="background: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Cookiless Cookies&lt;span style="color: blue"&gt;&am