<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/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>.NET</title>
        <link>http://blogs.ugidotnet.org/rimariot/category/.NET.aspx</link>
        <description>.NET</description>
        <language>it-IT</language>
        <copyright>Riccardo Mariotti</copyright>
        <generator>Subtext Version 2.6.0.0</generator>
        <item>
            <title>AVR Italy Community</title>
            <link>http://blogs.ugidotnet.org/rimariot/archive/2008/05/28/92843.aspx</link>
            <description>&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Volevo segnalare il mio &lt;/font&gt;&lt;font face="Verdana" size="2"&gt;tentativo di istituire la prima comunità italiana di utilizzatori di microcontrollori &lt;/font&gt;&lt;a class="null" title="AVR" target="_blank" href="http://www.atmel.com/products/AVR/"&gt;&lt;font face="Verdana" size="2"&gt;AVR&lt;/font&gt;&lt;/a&gt;&lt;font face="Verdana" size="2"&gt;® della &lt;/font&gt;&lt;a class="null" href="http://www.atmel.com/"&gt;&lt;font face="Verdana" size="2"&gt;Atmel&lt;/font&gt;&lt;/a&gt;&lt;font face="Verdana" size="2"&gt;®, appassionati di elettronica e di programmazione. Si prenderanno in considerazione prevalentemente i progetti e gli articoli riguardanti lo sviluppo di applicazioni, plug-in e librerie per l'interfacciamento del mondo dei micro AVR ed i personal computer con sistema operativo Microsoft® Windows®, prendendo come riferimento per lo sviluppo il Framework Microsoft® .NET, il linguaggio C# e Visual Studio.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Per gli interessati: &lt;/font&gt;&lt;a href="http://avr.rmariotti.it"&gt;&lt;font face="Verdana" size="2"&gt;http://avr.rmariotti.it&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/rimariot/aggbug/92843.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Riccardo Mariotti</dc:creator>
            <guid>http://blogs.ugidotnet.org/rimariot/archive/2008/05/28/92843.aspx</guid>
            <pubDate>Wed, 28 May 2008 12:47:06 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/rimariot/archive/2008/05/28/92843.aspx#feedback</comments>
            <slash:comments>35</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/rimariot/comments/commentRss/92843.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/rimariot/services/trackbacks/92843.aspx</trackback:ping>
        </item>
        <item>
            <title>Modifica delle proprietà e INotifyPropertyChanged</title>
            <link>http://blogs.ugidotnet.org/rimariot/archive/2008/03/14/91693.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;Spesso in rete trovo degli esempi di implementazione dell'interfaccia &lt;strong&gt;INotifyPropertyChanged&lt;/strong&gt; che non mi piacciono per niente (anche su &lt;/font&gt;&lt;font face="Verdana"&gt;MSDN). In particolare sono interessato a come e quando generare l'evento di notifica della modifica di una proprietà. Sembra che &lt;strong&gt;quasi tutti &lt;/strong&gt;&lt;/font&gt;&lt;font face="Verdana"&gt;&lt;strong&gt;ignorino&lt;/strong&gt; il fatto di generare la notifica &lt;strong&gt;solo quando il valore della proprietà è stato effettivamente modificato&lt;/strong&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;Credo invece sia importante gestire correttamente tale notifica, per una serie di ragioni, prima su tutte le performance. Nelle mie implementazioni di entità gestisco l'impostazione del nuovo valore e la notifica in modo centralizzato, con un &lt;/font&gt;&lt;font face="Verdana"&gt;metodo protected implementato nella classe base da cui derivano tutte le entità, con il compito di verificare effettivamente se il valore è  &lt;/font&gt;&lt;font face="Verdana"&gt;cambiato oppure no prima di impostare il nuovo valore e generare l'evento. E' chiaro che tutte le entità concrete devono rispettare il pattern di richiamare tale metodo nei rispettivi &lt;/font&gt;&lt;font face="Verdana"&gt;setter ed implementare l'override del metodo &lt;strong&gt;Equal&lt;/strong&gt; (e quindi obbligatoriamente anche &lt;strong&gt;GetHashCode&lt;/strong&gt;) in modo da comparare anche &lt;/font&gt;&lt;font face="Verdana"&gt;proprietà che rappresentano altre entità.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Sto sbagliando, nel senso, mi sto facendo troppi problemi?&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/rimariot/aggbug/91693.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Riccardo Mariotti</dc:creator>
            <guid>http://blogs.ugidotnet.org/rimariot/archive/2008/03/14/91693.aspx</guid>
            <pubDate>Fri, 14 Mar 2008 09:54:26 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/rimariot/archive/2008/03/14/91693.aspx#feedback</comments>
            <slash:comments>27</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/rimariot/comments/commentRss/91693.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/rimariot/services/trackbacks/91693.aspx</trackback:ping>
        </item>
        <item>
            <title>Implementare ISupportInitialize nelle classi entità</title>
            <link>http://blogs.ugidotnet.org/rimariot/archive/2008/03/13/91679.aspx</link>
            <description>&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Sto realizzando l'ennesima versione di una classe base astratta da utilizzare per tutte le entità aziendali. Questa classe dovrà implementare alcune interfacce basilari, tra le quali &lt;strong&gt;INotifyPropertyChanged&lt;/strong&gt;, e pensavo anche alla &lt;strong&gt;ISupportInitialize&lt;/strong&gt;. Il dubbio che ho nell'implementare quest'ultima interfaccia è se devo generare o no gli eventi di notifica del cambio dei valori delle proprietà nel momento che a seguito della chiamata al metodo &lt;strong&gt;ISupportInitialize.EndInit()&lt;/strong&gt; vado ad impostare tutti i valori delle proprietà modificate dopo la chiamata a &lt;strong&gt;ISupportInitialize.BeginInit()&lt;/strong&gt;.&lt;/font&gt;&lt;/div&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Per chiarezza (?), segue il frammento dell'implementazione della classe ed in particolare la parte di implementazione dell'interfaccia &lt;strong&gt;ISupportInitialize.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;div&gt;&lt;font face="Courier New"&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue"&gt;      #region&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt"&gt; ISupportInitialize implementation&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;      &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; BeginInit()&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;      {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;         &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (!m_Initializing)&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;         {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;            m_InitializeData = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Hashtable&lt;/span&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;            m_Initializing = &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;         }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;      }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Courier New"&gt; &lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;      &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; EndInit()&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;      {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;         &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (m_Initializing)&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;         {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;            m_Initializing = &lt;span style="COLOR: blue"&gt;false&lt;/span&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;            &lt;span style="COLOR: #2b91af"&gt;Type&lt;/span&gt; t = &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.GetType();&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;            &lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR: #2b91af"&gt;DictionaryEntry&lt;/span&gt; entry &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; m_InitializeData)&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;            {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;               &lt;span style="COLOR: #2b91af"&gt;PropertyInfo&lt;/span&gt; pi = t.GetProperty((&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;)entry.Key);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;               &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (pi != &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;               {&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;                  pi.SetValue(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;, entry.Value, &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;               }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;            }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;            m_InitializeData = &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;         }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt"&gt;&lt;font face="Courier New"&gt;      }&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue"&gt;&lt;font face="Courier New"&gt;      #endregion&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue"&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&lt;/span&gt; &lt;/div&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;In questa implementazione nel metodo &lt;strong&gt;EndInit&lt;/strong&gt; si impostano i valori di tutte le proprietà modificate dopo la chiamata alla &lt;strong&gt;BeginInit&lt;/strong&gt; bufferizzate in una tabella hash, chiamando il metodo &lt;strong&gt;SetValue&lt;/strong&gt; via reflection che invoca il setter della relativa proprietà, la quale noticherà la modifica generando l'evento relativo all'implementazione della &lt;strong&gt;INotifyPropertyChanged&lt;/strong&gt; (non mostrata nel frammento di codice).&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Quindi ecco il dubbio: è corretto così, oppure devo disabilitare le notifiche del cambio delle proprietà quando sono nella &lt;strong&gt;EndInit&lt;/strong&gt;? Personalmente credo che come è scritta ora non vada bene. Da quello che ho capito io, lo scopo dell'implementazione dell'interfaccia &lt;strong&gt;ISupportInitialize&lt;/strong&gt; è di impostare tutte le proprietà senza craere problemi di incoerenza sullo stato dell'entità stessa e quindi, credo che non debbano essere generare le relative notifiche, le quali potrebbero dare problemi ai client "in ascolto".&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Sono graditi commenti e/o suggerimenti.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/rimariot/aggbug/91679.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Riccardo Mariotti</dc:creator>
            <guid>http://blogs.ugidotnet.org/rimariot/archive/2008/03/13/91679.aspx</guid>
            <pubDate>Thu, 13 Mar 2008 12:13:05 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/rimariot/archive/2008/03/13/91679.aspx#feedback</comments>
            <slash:comments>237</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/rimariot/comments/commentRss/91679.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/rimariot/services/trackbacks/91679.aspx</trackback:ping>
        </item>
        <item>
            <title>WPF binding con oggetti Visual ed entità</title>
            <link>http://blogs.ugidotnet.org/rimariot/archive/2008/02/28/91409.aspx</link>
            <description>&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Sto progettando un framework per il disegno di oggetti grafici in WPF utilizzabili per comporre disegni, schemi, organigrammi, pert, ecc. Dato che ogni disegno dovrà essere caricato e salvato in data set di vario tipo (file XML, database SQL) ogni oggetto grafico sarà in realtà una rappresentazione di entità aziendali custom serializzabili.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Per disaccoppiare la rappresentazione grafica ed i dati, ho pensato di utilizzare il binding già implementato da WPF. In pratica, l'utilizzo del binding è un po' fuori dai soliti schemi ed esempi che si trovano in rete, nel senso che le proprietà collegate non sono riferite a controlli utente di una window, ma sono proprietà di oggetti Visual disegnabili su un Canvas (semplificando al massimo, si immagini che siano primitive del tipo rettangolo, ellisse, testo, poligono, ecc.). Inoltre le proprietà saranno modificabili dall'utente in modo interattivo utilizzando ad esempio un editor specifico, con l'uso di adorner creati appositamente. La modifica interattiva, tramite il binding, modificherà anche le rispettive proprietà degli oggetti entità e quindi i dati persistenti sul data set.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Questa tecnica, per le prove fatte fino ad ora, funziona (ovviamente il framework .NET fa il suo dovere). Volevo sapere se qualcuno di voi ha già fatto cose simili o conosce qualche link in merito al binding su primitive grafiche.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/rimariot/aggbug/91409.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Riccardo Mariotti</dc:creator>
            <guid>http://blogs.ugidotnet.org/rimariot/archive/2008/02/28/91409.aspx</guid>
            <pubDate>Thu, 28 Feb 2008 09:55:52 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/rimariot/archive/2008/02/28/91409.aspx#feedback</comments>
            <slash:comments>18</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/rimariot/comments/commentRss/91409.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/rimariot/services/trackbacks/91409.aspx</trackback:ping>
        </item>
        <item>
            <title>Distruttori e Dispose in .NET</title>
            <link>http://blogs.ugidotnet.org/rimariot/archive/2005/10/29/28923.aspx</link>
            <description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Durante lo sviluppo di una classe base&amp;nbsp;per l'accesso ai dati utilizzando la Enterprise Library mi sono accorto di un mio bug riguardante il non rilascio delle risorse quando utilizzavo il contesto di configurazione nel costruttore della classe. Questo provocava un memory leaks che mi faceva crescere il numero di thread allocati mano a mano che utilizzavo le classi per l'accesso ai dati. Quindi mi sono detto: mi scrivo una serie di regole per evitare in futuro&amp;nbsp;questo grossolano&amp;nbsp;errore nella programmazione in .NET. &lt;/FONT&gt;&lt;FONT face=Verdana size=2&gt;Per fortuna, come capita di sovente, in rete altri hanno gi&amp;#224; fatto esperienza&amp;nbsp;e scritto qualche cosa, e in questo caso mi sono ritrovato a leggere un interessante post &lt;A href="http://www.csharphelp.com/archives3/archive571.html"&gt;http://www.csharphelp.com/archives3/archive571.html&lt;/A&gt;, riguardante alcune semplici regole&amp;nbsp;quando si tratta di distruttori e Dispose in .NET.&amp;nbsp;Mi sono permesso di tradurlo a modo mio nell'articolo &lt;A href="http://blogs.ugidotnet.org/rimariot/articles/28926.aspx"&gt;http://blogs.ugidotnet.org/rimariot/articles/28926.aspx&lt;/A&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.ugidotnet.org/rimariot/aggbug/28923.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Riccardo Mariotti</dc:creator>
            <guid>http://blogs.ugidotnet.org/rimariot/archive/2005/10/29/28923.aspx</guid>
            <pubDate>Sat, 29 Oct 2005 15:09:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/rimariot/archive/2005/10/29/28923.aspx#feedback</comments>
            <slash:comments>256</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/rimariot/comments/commentRss/28923.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/rimariot/services/trackbacks/28923.aspx</trackback:ping>
        </item>
    </channel>
</rss>