October 2007 Blog Posts

Ugialt.net

Prendo a prestito delle parole di Antonio Carpentieri per descrivere il perchè ho aderito con entusiasmo all'iniziativa ugialt.net:".....Ha un mix di agile + object-orientation + patterns + TDD + DDD. Perchè per ognuno dei punti di cui sopra esistono degli strumenti che permettono di applicarli in .net, perchè li USO, perchè spesso ho dei dubbi, delle perplessità ma nonostante queste effettuo delle scelte sia di design, che di processo e VOGLIO informarmi su come altri stanno lavorando, fanno evolvere i pattern di design o del processo perchè cerco il modo migliore di comunicare e motivare delle scelte tecniche che agli...

posted @ Wednesday, October 31, 2007 1:36 PM | Feedback (0)

Implementazione esplicita di membri di interfaccia

L'implementazione esplicita di una interfaccia presenta caratteristiche significative rispetto ad una implementazione per così dire non esplicita. Ad esempio, si consideri l'interfaccia: public interface IExplicitImplementation  { string Method1(string par); } e la seguente classe che la implementa in modo esplicito: public class Class1 : IExplicitImplementation  { string IExplicitImplementation.Method1(string par) {              return "Hello world " + par; } } Le caratteristiche salienti sono: - Il client che consuma la classe Class1 utilizzando una istanza di quest'ultima è impossibilitato a richiamare il metodo Method1 in quanto quest'ultimo NON fa parte dell'interfaccia pubblica della classe (non è visibile con l'intellisense ed il tentativo di richiamare comunque il metodo genera un...

posted @ Thursday, October 25, 2007 12:13 PM | Feedback (0)

Come terminare un processo corrotto in .NET

Da .NET 2.0 in poi è possibile terminare un processo corrotto irreparabilmente attraverso il medodo Environment.Failfast(string message), il quale provvede a: Scrivere una entry nell'Application Event Log con il messaggio specificato NON eseguire alcun blocco try-finally ancora in sospeso NON esegue alcun finalizer sugli oggetti ancora in memoria Esegue un dump dell'applicazione Termina il processo I punti 2-3 sono necessari in un contesto simile in quanto la loro esecuzione potrebbe danneggiare risorse usate dall'applicazione stessa. Tuttavia gli oggetti CriticalFinalizerObject (di cui magari parlerò in un post a parte) sono comunque eseguiti prima di terminare il processo.

posted @ Thursday, October 25, 2007 6:54 AM | Feedback (0)

Inconsistenza operatori di confronto dei Nullable Types in C#

Il linguaggio C# offre un supporto decisamente migliore dei Nullable Types rispetto a VB .NET. Nonostante ciò, utilizzando gli operatori di confronto su un tipo Nullable, es. un intero, il risultato è a dir poco strano e può dar luogo a bug piuttosto subdoli. Infatti, eseguendo il seguente codice:int? a;int? b;a=null;b=null;Debug.WriteLine(a == b);Debug.WriteLine(a != b);l'uguaglianza dei due tipi nullable con entrambe le variabili impostate a null dà come risultato "true", mentre  l'operatore  di disuguaglianza  sulle stesse variabili produce come risultato "false". Sin qui il comportamento è coerente.Questo codice invece:Debug.WriteLine(a >= b);Debug.WriteLine(a <= b); produce in entrambi i casi un risultato...

posted @ Sunday, October 14, 2007 4:23 PM | Feedback (0)

Troubleshooting remote assistance

Per una volta parlo di come risolvere un piccolo ma noioso problema sistemistico: provando ad utilizzare l'assistenza remota di MSN mi appariva questo strano errore:"Impossibile aprire la Guida in linea e supporto tecnico perchè un servizio di sistema non è in esecuzione. Per risolvere il problema, avviare il servizio denominato 'Help Service"Il servizio in questione, chiamato "Guida in linea e supporto tecnico" nella versione italiana, è chiaramente la Guida in linea di Windows XP, che evidentemente non era presente sulla macchina. Ma l'aspetto più imbarazzante era che non  vi era nessun  servizio chiamato in quel modo tra l'elenco dei servizi...

posted @ Sunday, October 14, 2007 3:08 PM | Feedback (0)