novembre 2005 Blog Posts
Equals definisce una relazione di equivalenza su un tipo Foo se e solo se, per ogni istanze non nulle x, y e z di Foo abbiamo:
x.Equals(x) è true;
se x.Equals(y) è true, anche y.Equals(x) è true;
se x.Equals(y) && y.Equals(z) è true, anche x.Equals(z) è true
Scrivete un'implementazione migliore (cioè che ritorni correttamente Fuzzy.True per più tipi; per questo il tipo di ritorno è Fuzzy e non bool) per il metodo IsEqualsEquivalence, rispetto a questa banale:
public static Fuzzy IsEqualsEquivalence(Type t){ return Fuzzy.Maybe;}
dove Fuzzy è:
public enum Fuzzy{ False = -1, Maybe, True}
Tempo: tutta la settimana.
Questa mia foto, "i fantasmi del luogo", è stata votata come Foto della settimana sul gruppo Milanouel!W e ne sono onorato vista la qualità delle foto dei membri del gruppo.
Per me è stata una bella sorpresa.
Lo sapevate che esistono classi nel Framework .NET che portano lo stesso nome (ovviamente in namespace differenti)?
[mscorlib]System.Runtime.Remoting.Contexts.SynchronizationAttribute - [System.EnterpriseServices]System.EnterpriseServices.SynchronizationAttribute
Altri esempi? (l'esempio di sopra l'ho trovato nel recente libro di Nagel, p. 34)
(Aggiornamento 20/11/2005): Nei commenti trovate l'elenco completo dei 60 esempi di classi pubbliche nella 2.0 (Beta 2) che portano lo stesso nome e che hanno come root namespace, System (altrimenti sarebbero stati molti di più).
Facendo oggi con Massimo il refactoring con generics della classe DotNetNuke.Common.Utilities.Null, sono nate alcune considerazioni sui tipi generici. Di seguito il post a 4 mani - si nota anche dall'italiano :-)
Avendo una classe static Foo che espone funzionalità generiche e più conveniente definire il type parameter per un metodo (Dummy) piuttosto che per la classe. Questo perché a runtime verrà generata un'unica classe Foo con più metodi Dummy anziché più classi Foo con un metodo Dummy ciascuna. Per esempio, il seguente snippet:using System; class Foo<T>{ static Foo() { Console.WriteLine("Foo<{0}>", typeof(T)); } public static void Dummy() { }} class Foo{ static Foo() { ...