Inside .NET
Il post di Dino Esposito mi ha suscitato una riflessione. A mio avviso l'idea dello Script CallBacks è molto bella ma è credo sia l'ennesimo modo per girare attorno a un problema.
A mio avviso il web, data la sua natura stateless e disconnessa, non è nato per offrire una piattaforma dove far girare applicazioni che hanno bisogno di mantenere uno state ed effettuare operazioni complesse. I linguaggi di scripting e asp.net sono riusciti a portare e sfruttare all'estremo le potenzialità del web. Il punto del ragionamento è: vale veramente la pena storpiare una tecnologia a tal punto invece di crearne una ad...
Prendiamo questo Snippet di codice:
using System; using System.Runtime.Remoting; using System.Reflection; using System.Threading; namespace AppDomTest { public class InvokeMethod { public static void Main( String[] argv ) { AppDomainSetup info = new AppDomainSetup(); AppDomain dom = AppDomain.CreateDomain("RemoteDomain", null, info); Foo f = dom.CreateInstance("AppDomTest", "AppDomTest.Foo").Unwrap() as Foo; Foo f2 = new Foo(); Foo f3 = new Foo(); f3.PrintCounter(); AppDomain.Unload(dom); Console.Read(); } } public class Foo : MarshalByRefObject { private static int _ci = 0; public Foo() { _ci++; } public void...
Che differenza c'è tra queste due eccezioni? Chi meglio di Brad Abrams può spiegarcelo!
Oggi mi sono imbattuto in una possibile anomalia delle enumerazioni. Consideriamo una enum dichiarata così:
public enum MyEnum { Val0 = 0, Val10 = 10, Val2, Val3 = 7, Val11 = 11} Un possible frammento di codice che usa l'enum può essere il seguente:.....MyEnum p = MyEnum .Val11;int i = (int) p;Console.WriteLine("MyEnum : {0}, i: {1}", p, i);p = MyEnum .Val2; i = (int)p; Console.WriteLine("MyEnum : {0}, i: {1}", p, i); Cosa viene visualizzato a video? E' naturale aspettarsi di trovare le seguenti righe: "MyEnum : Val11, i: 11""MyEnum : Val2, i: 2"Invece inaspettatamente a video sarà stampato:"MyEnum : Val11, i: 11""MyEnum...
Evidentemente non sono l'unico a essermi fatto questa domanda....
Dando un'occhiata al codice di Mono, nell'implementazione della proprietà LocalEndPoint e RemoteEndPoint si può notare il seguente codice (e i commenti) :
"...
if(sa.Family==AddressFamily.InterNetwork || sa.Family==AddressFamily.InterNetworkV6 ) {
// Stupidly, EndPoint.Create() is an
// instance method
return new IPEndPoint(0, 0).Create(sa);
}
..."
Chissà se chi ha progettato (o implementato) la classe IPEndPoint lavora ancora in Microsoft:P
In questi giorni stavo dilettandomi a scrivere un Formatter personalizzato da affiancare al BinaryFormatter e al SoapFormatter. Grazie al prezioso link di Adrian sono partito leggendo la serie di articoli di Jeffrey Richter sulla serializzazione. Nel primo di questi articoli sono elencate la serie di operazioni eseguite da un generico Formatter durante la deserializzazione. In questa fase è citato il metodo statico FormatterServices.GetSerializableMembers. La documentazione microsoft riguardo questo metodo dice:
"Gets all the serializable member for a class of specified type". Inoltre nella sezione Remarks specifica: "Generally, members of a class are the nontransient, nonstatic members such as fields and properties. To be included, properties...