Web Log di Adrian Florea

"You know you've achieved perfection in design, not when you have nothing more to add, but when you have nothing more to take away." Antoine de Saint-Exupery
posts - 440, comments - 2715, trackbacks - 3944

My Links

Archives

Post Categories

Image Galleries

.RO Blogs

.RO People

.RO Sites

Blogs

Furls

Links

vinCitori

Test Sharp (a@f) - la soluzione

In modo sorprendente, la soluzione al test è questa: compilate il seguente snippet J#:

public class a
{
  public int GetHashCode()
  {
    return 15;
  }
}

e referenziate l'assembly al vostro snippet C#:

class Test
{
  static void Main()
  {
    System.Console.WriteLine(new a());
  }
}

Come mai stampa a@f a console? Semplice! In Visual J# tutte le classi sovrascrivono implicitamente i metodi virtual MemberwiseClone() e ToString(), dove ToString() semplicemente ritorna com.ms.vjsharp.lang.ObjectImpl.jloToString(this) (dell'assembly vjslib.dll). E che stringa ritorna questo metodo jloToString?:

new StringBuilder(obj.GetType().FullName.Replace('+', '$')).Append('@').Append(Integer.toHexString(obj.GetHashCode()).ToString()).ToString()

ovvero il full name della classe (in cui per le classi nested i "+" vengono sostituiti da "$") concatenato con "@" e con il hash code esadecimale del parametro passato (nel nostro caso, obj). La classe Integer qui è del namespace java.lang.

Quindi, se il hash code della classe a è 15 (0xF), allora a console vedremo stampato a@f.

Non ha risposto nessuno... :-)

I versi del giorno:

"Don't move too fast if you want your love to last.
You've been movin' much too fast.
"

Jim Morrison - Take it as it comes.

Print | posted on venerdì 18 marzo 2005 15:26 | Filed Under [ Test Sharp ]

Powered by:
Powered By Subtext Powered By ASP.NET