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

toString or not ToString

Avere in un linguaggio .NET un metodo pubblico, non statico, conforme al CLS e di una classe pubblica, in un assembly, non necessariamente vuol dire che possa essere richiamato da un altro assembly!

L'esempio non è evidente: il metodo toString in questo snippet J#:

class A extends java.lang.Object
{
  public String toString()
  {
    return "A::toString";
  }
}

non può essere richiamato da C#:

class Test
{
  static void Main()
  {
    // error CS0117: 'A' does not contain a definition for 'toString'
    System.Console.WriteLine(new A().toString());
  }
}

se non lo sostituiamo con ToString. Da VisualBasic .NET invece, va ("identifiers are case insensitive"):

Class Test
  Shared Sub Main()
    ' OK
    System.Console.WriteLine(New A().toString())
  End Sub
End
Class

E questo perché:

"In Visual J#, java.lang.Object is treated as a language-specific root of the object hierarchy. The means to access this object from languages supported by the common language runtime is through System.Object. Thus, such languages do not see Visual J# objects as special objects deriving from java.lang.Object." (Object Hierarchy Semantics)

e quindi il compilatore Visual J# "sostituisce" java.lang.Object con System.Object e toString con ToString.

Non so i compilatori .NET per gli altri linguaggi che hanno una superclasse di tutte le altre classi come la considerano - per esempio in Scala esiste una superclasse di tutte le classi, scala.Any.

Print | posted on venerdì 18 marzo 2005 18:27 | Filed Under [ Carillon .NET CLS ]

Powered by:
Powered By Subtext Powered By ASP.NET